New function: g_clear_object()

By analogy to g_clear_error, takes a pass-by-reference GObject reference
and, if non-%NULL, unrefs it and sets it equal to %NULL.

Bug #620263.
This commit is contained in:
Ryan Lortie
2010-11-08 16:42:32 -05:00
parent 78bc8bec4f
commit 1a1fc130ec
7 changed files with 93 additions and 1 deletions

35
gobject/tests/reference.c Normal file
View File

@@ -0,0 +1,35 @@
#include <glib-object.h>
static void
test_clear (void)
{
GObject *o = NULL;
GObject *tmp;
g_clear_object (&o);
g_assert (o == NULL);
tmp = g_object_new (G_TYPE_OBJECT, NULL);
g_assert_cmpint (tmp->ref_count, ==, 1);
o = g_object_ref (tmp);
g_assert (o != NULL);
g_assert_cmpint (tmp->ref_count, ==, 2);
g_clear_object (&o);
g_assert_cmpint (tmp->ref_count, ==, 1);
g_assert (o == NULL);
g_object_unref (tmp);
}
int
main (int argc, char **argv)
{
g_test_init (&argc, &argv, NULL);
g_type_init ();
g_test_add_func ("/object/clear", test_clear);
return g_test_run ();
}