Order refs/unrefs so setting the same object back is safe. (#112861,
authorOwen Taylor <otaylor@redhat.com>
Fri, 30 May 2003 18:44:57 +0000 (18:44 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Fri, 30 May 2003 18:44:57 +0000 (18:44 +0000)
Fri May 30 14:42:24 2003  Owen Taylor  <otaylor@redhat.com>

        * gobject.c (g_value_set_object): Order refs/unrefs
        so setting the same object back is safe. (#112861,
        Morten Welinder)

gobject/ChangeLog
gobject/gobject.c

index e829585b1888f04607f0a7c2310ff473db640765..80b1e930b7dc1c00895ccfcc33eba68095ea7793 100644 (file)
@@ -1,3 +1,9 @@
+Fri May 30 14:42:24 2003  Owen Taylor  <otaylor@redhat.com>
+       * 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  <sven@gimp.org>
 
        * gtype.c (type_data_finalize_class_ifaces_Wm): removed leftover
index e9c39b92d595cd02585a180d3a76a324251d8eee..591d7803c9f0167116f79848cc5f18073d4612d1 100644 (file)
@@ -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