From 6633c1f9ff3b9a1fc8431c50baad2337ccdc8a36 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Fri, 15 Nov 2013 16:29:38 +0200 Subject: [PATCH] bluetooth: Don't mark device valid before it has an adapter At this point this doesn't make any other practical difference than making the code more logical, but in the next patch I'll fire the DEVICE_CONNECTION_CHANGED hook in set_device_info_valid(), and at that point it's important that the device isn't marked valid too early, because otherwise external code would see "valid" devices that however don't have the adapter set. --- src/modules/bluetooth/bluez5-util.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c index 23a53f11a..e3266959f 100644 --- a/src/modules/bluetooth/bluez5-util.c +++ b/src/modules/bluetooth/bluez5-util.c @@ -634,7 +634,12 @@ static int parse_device_properties(pa_bluetooth_device *d, DBusMessageIter *i, b return -1; } - set_device_info_valid(d, 1); + if (!is_property_change && d->adapter) + set_device_info_valid(d, 1); + + /* If d->adapter is NULL, device_info_valid will be left as 0, and updated + * after all interfaces have been parsed. */ + return 0; } @@ -813,14 +818,19 @@ static void parse_interfaces_and_properties(pa_bluetooth_discovery *y, DBusMessa dbus_message_iter_next(&element_i); } - PA_HASHMAP_FOREACH(d, y->devices, state) + PA_HASHMAP_FOREACH(d, y->devices, state) { + if (d->device_info_valid != 0) + continue; + if (!d->adapter && d->adapter_path) { d->adapter = pa_hashmap_get(d->discovery->adapters, d->adapter_path); if (!d->adapter) { pa_log_error("Device %s is child of nonexistent adapter %s", d->path, d->adapter_path); set_device_info_valid(d, -1); - } + } else + set_device_info_valid(d, 1); } + } return; }