From 68e49c7811a06e580f3b8472f0d08fc5c1fd2346 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Fri, 30 May 2003 18:44:57 +0000 Subject: [PATCH] Order refs/unrefs so setting the same object back is safe. (#112861, Fri May 30 14:42:24 2003 Owen Taylor * gobject.c (g_value_set_object): Order refs/unrefs so setting the same object back is safe. (#112861, Morten Welinder) --- gobject/ChangeLog | 6 ++++++ gobject/gobject.c | 15 +++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/gobject/ChangeLog b/gobject/ChangeLog index e829585b..80b1e930 100644 --- a/gobject/ChangeLog +++ b/gobject/ChangeLog @@ -1,3 +1,9 @@ +Fri May 30 14:42:24 2003 Owen Taylor + + * gobject.c (g_value_set_object): Order refs/unrefs + so setting the same object back is safe. (#112861, + Morten Welinder) + 2003-03-24 Sven Neumann * gtype.c (type_data_finalize_class_ifaces_Wm): removed leftover diff --git a/gobject/gobject.c b/gobject/gobject.c index e9c39b92..591d7803 100644 --- a/gobject/gobject.c +++ b/gobject/gobject.c @@ -1508,14 +1508,12 @@ void g_value_set_object (GValue *value, gpointer v_object) { + GObject *old; + g_return_if_fail (G_VALUE_HOLDS_OBJECT (value)); - - if (value->data[0].v_pointer) - { - g_object_unref (value->data[0].v_pointer); - value->data[0].v_pointer = NULL; - } + old = value->data[0].v_pointer; + if (v_object) { g_return_if_fail (G_IS_OBJECT (v_object)); @@ -1524,6 +1522,11 @@ g_value_set_object (GValue *value, value->data[0].v_pointer = v_object; g_object_ref (value->data[0].v_pointer); } + else + value->data[0].v_pointer = NULL; + + if (old) + g_object_unref (old); } void -- 2.34.1