gio: fix race condition in GDBusObjectManagerClient 31/199531/2
authorBeniamino Galvani <bgalvani@redhat.com>
Sat, 30 Sep 2017 09:26:29 +0000 (11:26 +0200)
committerHyotaek Shim <hyotaek.shim@samsung.com>
Tue, 26 Feb 2019 02:30:40 +0000 (02:30 +0000)
priv->map_object_path_to_object_proxy must be protected to avoid
concurrent access by multiple threads. Move the hash table insertion
into the critical section.

https://bugzilla.gnome.org/show_bug.cgi?id=788368

Change-Id: I0fc7b7ab9edea681cc71b3c36cc0b5cebb6a1cf8

gio/gdbusobjectmanagerclient.c

index 3a2deef..b6b6a40 100644 (file)
@@ -1515,6 +1515,13 @@ add_interfaces (GDBusObjectManagerClient *manager,
       g_variant_unref (properties);
     }
 
+  if (added)
+    {
+      g_hash_table_insert (manager->priv->map_object_path_to_object_proxy,
+                           g_strdup (object_path),
+                           op);
+    }
+
   g_mutex_unlock (&manager->priv->lock);
 
   /* now that we don't hold the lock any more, emit signals */
@@ -1528,12 +1535,8 @@ add_interfaces (GDBusObjectManagerClient *manager,
   g_list_free (interface_added_signals);
 
   if (added)
-    {
-      g_hash_table_insert (manager->priv->map_object_path_to_object_proxy,
-                           g_strdup (object_path),
-                           op);
-      g_signal_emit_by_name (manager, "object-added", op);
-    }
+    g_signal_emit_by_name (manager, "object-added", op);
+
   g_object_unref (manager);
   g_object_unref (op);
 }