src/modules/bluetooth/bluetooth-util.c |   14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

New commits:
commit 90ae7775002ba75cb890f14e15653e42ebecce35
Author: Mikel Astiz <[email protected]>
Date:   Sun Feb 17 10:04:16 2013 +0100

    bluetooth: Fix possible adapter duplicates
    
    The D-Bus signal AdapterAdded can be received during our call to
    GetProperties(), before the reply is received. In this case, the adapter
    will be listed twice and thus the endpoint registration will fail with
    "AlreadyExists" as follows:
    
    D: [pulseaudio] bluetooth-util.c: dbus: interface=org.bluez.Manager, 
path=/, member=AdapterAdded
    D: [pulseaudio] bluetooth-util.c: Adapter /org/bluez/21220/hci0 created
    D: [pulseaudio] bluetooth-util.c: Registering /MediaEndpoint/HFPAG on 
adapter /org/bluez/21220/hci0.
    D: [pulseaudio] bluetooth-util.c: Registering /MediaEndpoint/HFPHS on 
adapter /org/bluez/21220/hci0.
    D: [pulseaudio] bluetooth-util.c: Registering /MediaEndpoint/A2DPSource on 
adapter /org/bluez/21220/hci0.
    D: [pulseaudio] bluetooth-util.c: Registering /MediaEndpoint/A2DPSink on 
adapter /org/bluez/21220/hci0.
    D: [pulseaudio] bluetooth-util.c: Registering /MediaEndpoint/HFPAG on 
adapter /org/bluez/21220/hci0.
    D: [pulseaudio] bluetooth-util.c: Registering /MediaEndpoint/HFPHS on 
adapter /org/bluez/21220/hci0.
    D: [pulseaudio] bluetooth-util.c: Registering /MediaEndpoint/A2DPSource on 
adapter /org/bluez/21220/hci0.
    D: [pulseaudio] bluetooth-util.c: Registering /MediaEndpoint/A2DPSink on 
adapter /org/bluez/21220/hci0.
    E: [pulseaudio] bluetooth-util.c: RegisterEndpoint() failed: 
org.bluez.Error.AlreadyExists: Already Exists
    E: [pulseaudio] bluetooth-util.c: RegisterEndpoint() failed: 
org.bluez.Error.AlreadyExists: Already Exists
    E: [pulseaudio] bluetooth-util.c: RegisterEndpoint() failed: 
org.bluez.Error.AlreadyExists: Already Exists
    E: [pulseaudio] bluetooth-util.c: RegisterEndpoint() failed: 
org.bluez.Error.AlreadyExists: Already Exists

diff --git a/src/modules/bluetooth/bluetooth-util.c 
b/src/modules/bluetooth/bluetooth-util.c
index 33fa689..688fee0 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -67,6 +67,7 @@ struct pa_bluetooth_discovery {
     pa_core *core;
     pa_dbus_connection *connection;
     PA_LLIST_HEAD(pa_dbus_pending, pending);
+    bool adapters_listed;
     pa_hashmap *devices;
     pa_hashmap *transports;
     pa_hook hooks[PA_BLUETOOTH_HOOK_MAX];
@@ -278,8 +279,11 @@ static int parse_manager_property(pa_bluetooth_discovery 
*y, DBusMessageIter *i,
             DBusMessageIter ai;
             dbus_message_iter_recurse(&variant_i, &ai);
 
-            if (dbus_message_iter_get_arg_type(&ai) == DBUS_TYPE_OBJECT_PATH &&
-                pa_streq(key, "Adapters")) {
+            if (pa_streq(key, "Adapters")) {
+                y->adapters_listed = true;
+
+                if (dbus_message_iter_get_arg_type(&ai) != 
DBUS_TYPE_OBJECT_PATH)
+                    break;
 
                 while (dbus_message_iter_get_arg_type(&ai) != 
DBUS_TYPE_INVALID) {
                     const char *value;
@@ -959,6 +963,11 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, 
DBusMessage *m, void *us
             goto fail;
         }
 
+        if (!y->adapters_listed) {
+            pa_log_debug("Ignoring 'AdapterAdded' because initial adapter list 
has not been received yet.");
+            return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+        }
+
         pa_log_debug("Adapter %s created", path);
 
         found_adapter(y, path);
@@ -1011,6 +1020,7 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, 
DBusMessage *m, void *us
             if (old_owner && *old_owner) {
                 pa_log_debug("Bluetooth daemon disappeared.");
                 remove_all_devices(y);
+                y->adapters_listed = false;
             }
 
             if (new_owner && *new_owner) {

_______________________________________________
pulseaudio-commits mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-commits

Reply via email to