[gnome-bluetooth] lib: Fix possible race when creating adapters or devices
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-bluetooth] lib: Fix possible race when creating adapters or devices
- Date: Tue, 14 Nov 2017 16:58:50 +0000 (UTC)
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]