[gnome-bluetooth] lib: Fix possible race when creating adapters or devices



commit 9c6d93a9efbc42db43a1d9f1864707b92b55d015
Author: Bastien Nocera <hadess hadess net>
Date:   Tue Nov 14 17:30:07 2017 +0100

    lib: Fix possible race when creating adapters or devices
    
    When new D-Bus objects appear, listen to changes to their properties as
    soon as possible to avoid missing out on events. This can happen if a
    synchronous D-Bus call is made between the device appearing, and we
    start listening to changes.
    
    The window for that race is smaller now that we avoid creating
    GDBusProxies and fetching properties synchronously when new adapters or
    devices appear, but this close that window altogether.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=782530

 lib/bluetooth-client.c |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)
---
diff --git a/lib/bluetooth-client.c b/lib/bluetooth-client.c
index e749abb..5631fee 100644
--- a/lib/bluetooth-client.c
+++ b/lib/bluetooth-client.c
@@ -421,6 +421,9 @@ device_added (GDBusObjectManager   *manager,
        GtkTreeIter iter, parent;
        guint16 appearance;
 
+       g_signal_connect (G_OBJECT (device), "g-properties-changed",
+                         G_CALLBACK (device_g_properties_changed), client);
+
        adapter_path = device1_get_adapter (device);
        address = device1_get_address (device);
        alias = device1_get_alias (device);
@@ -484,10 +487,6 @@ device_added (GDBusObjectManager   *manager,
                                   -1);
        }
        g_strfreev (uuids);
-
-       g_signal_connect (G_OBJECT (device), "g-properties-changed",
-                         G_CALLBACK (device_g_properties_changed), client);
-
        g_object_unref (adapter);
 }
 
@@ -665,6 +664,9 @@ adapter_added (GDBusObjectManager   *manager,
        const gchar *address, *name;
        gboolean discovering, discoverable, powered;
 
+       g_signal_connect (G_OBJECT (adapter), "g-properties-changed",
+                         G_CALLBACK (adapter_g_properties_changed), client);
+
        address = adapter1_get_address (adapter);
        name = adapter1_get_name (adapter);
        discovering = adapter1_get_discovering (adapter);
@@ -680,9 +682,6 @@ adapter_added (GDBusObjectManager   *manager,
                                          BLUETOOTH_COLUMN_POWERED, powered,
                                          -1);
 
-       g_signal_connect (G_OBJECT (adapter), "g-properties-changed",
-                         G_CALLBACK (adapter_g_properties_changed), client);
-
        if (!priv->default_adapter) {
                default_adapter_changed (manager,
                                         g_dbus_object_get_object_path (g_dbus_interface_get_object 
(G_DBUS_INTERFACE (adapter))),


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]