mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
Merge branch '488-assert-gobjects-dont-leak' into 'master'
gobject: Add a g_assert_finalize_object() macro Closes #1780 and #488 See merge request GNOME/glib!859
This commit is contained in:
commit
78b1278d44
@ -322,6 +322,9 @@ g_weak_ref_clear
|
||||
g_weak_ref_get
|
||||
g_weak_ref_set
|
||||
|
||||
<SUBSECTION Testing>
|
||||
g_assert_finalize_object
|
||||
|
||||
<SUBSECTION Standard>
|
||||
G_INITIALLY_UNOWNED
|
||||
G_INITIALLY_UNOWNED_CLASS
|
||||
|
@ -77,7 +77,6 @@ test_store_boundaries (void)
|
||||
store = g_list_store_new (G_TYPE_MENU_ITEM);
|
||||
|
||||
item = g_menu_item_new (NULL, NULL);
|
||||
g_object_add_weak_pointer (G_OBJECT (item), (gpointer *) &item);
|
||||
|
||||
/* remove an item from an empty list */
|
||||
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "*g_sequence*");
|
||||
@ -123,8 +122,7 @@ test_store_boundaries (void)
|
||||
g_assert_cmpuint (g_list_model_get_n_items (G_LIST_MODEL (store)), ==, 1);
|
||||
|
||||
g_object_unref (store);
|
||||
g_object_unref (item);
|
||||
g_assert_null (item);
|
||||
g_assert_finalize_object (item);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -673,18 +673,10 @@ static void
|
||||
teardown_without_loop (Test *test,
|
||||
gconstpointer unused)
|
||||
{
|
||||
gpointer weak_pointer = test->interaction;
|
||||
|
||||
g_object_add_weak_pointer (weak_pointer, &weak_pointer);
|
||||
|
||||
g_object_unref (test->connection);
|
||||
|
||||
g_object_unref (test->password);
|
||||
|
||||
g_object_unref (test->interaction);
|
||||
|
||||
g_assert (weak_pointer == NULL);
|
||||
|
||||
g_assert_finalize_object (test->interaction);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
|
@ -744,6 +744,38 @@ static inline gboolean
|
||||
(g_set_object) ((GObject **) (object_ptr), (GObject *) (new_object)) \
|
||||
)
|
||||
|
||||
/**
|
||||
* g_assert_finalize_object: (skip)
|
||||
* @object: (transfer full) (type GObject.Object): an object
|
||||
*
|
||||
* Assert that @object is non-%NULL, then release one reference to it with
|
||||
* g_object_unref() and assert that it has been finalized (i.e. that there
|
||||
* are no more references).
|
||||
*
|
||||
* If assertions are disabled via `G_DISABLE_ASSERT`,
|
||||
* this macro just calls g_object_unref() without any further checks.
|
||||
*
|
||||
* This macro should only be used in regression tests.
|
||||
*
|
||||
* Since: 2.62
|
||||
*/
|
||||
static inline void
|
||||
(g_assert_finalize_object) (GObject *object)
|
||||
{
|
||||
gpointer weak_pointer = object;
|
||||
|
||||
g_assert_true (G_IS_OBJECT (weak_pointer));
|
||||
g_object_add_weak_pointer (object, &weak_pointer);
|
||||
g_object_unref (weak_pointer);
|
||||
g_assert_null (weak_pointer);
|
||||
}
|
||||
|
||||
#ifdef G_DISABLE_ASSERT
|
||||
#define g_assert_finalize_object(object) g_object_unref (object)
|
||||
#else
|
||||
#define g_assert_finalize_object(object) (g_assert_finalize_object ((GObject *) object))
|
||||
#endif
|
||||
|
||||
/**
|
||||
* g_clear_weak_pointer: (skip)
|
||||
* @weak_pointer_location: The memory address of a pointer
|
||||
|
Loading…
Reference in New Issue
Block a user