mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 03:16:17 +01:00
gobject: Add a g_assert_finalize_object() macro
With modifications by Philip Withnall. Fixes: #488
This commit is contained in:
parent
3f1a79a4fa
commit
b76bf3ca72
@ -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
|
||||
|
@ -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