GDBusProxy: on_properties_changed initialize some variables
authorMatthias Clasen <mclasen@redhat.com>
Sat, 13 Aug 2011 20:09:41 +0000 (16:09 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 13 Aug 2011 20:09:41 +0000 (16:09 -0400)
This avoids calling g_variant_unref and g_free on uninitialized memory
if PropertiesChanged is received in the creating thread's thread-default
main context's thread, at the same time as releasing the last ref in
another thread. This would result in "goto out" before the variables
freed after that label had been initialized to NULL.

Based on a patch by Simon McVittie, bug 656282

gio/gdbusproxy.c

index 4a321f7393893f993aee9ba1d77364ca930a8d85..a0e01807dff942308c827323984a3ffcf4f1741b 100644 (file)
@@ -928,6 +928,9 @@ on_properties_changed (GDBusConnection *connection,
   GVariant *value;
   guint n;
 
+  changed_properties = NULL;
+  invalidated_properties = NULL;
+
   G_LOCK (signal_subscription_lock);
   proxy = data->proxy;
   if (proxy == NULL)
@@ -941,9 +944,6 @@ on_properties_changed (GDBusConnection *connection,
       G_UNLOCK (signal_subscription_lock);
     }
 
-  changed_properties = NULL;
-  invalidated_properties = NULL;
-
   if (!proxy->priv->initialized)
     goto out;