summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGustavo Padovan <gustavo.padovan@collabora.co.uk>2012-08-09 18:57:25 -0300
committerPatrik Flykt <patrik.flykt@linux.intel.com>2012-08-10 17:10:10 +0300
commit01126286f96856aab6b0de171830f4e8e842e1da (patch)
treee810f7b5544cca037cab56a36e7468a3e1656274
parent665eff90e5908188906f7d8b55bfe4eba28eaff2 (diff)
downloadconnman-01126286f96856aab6b0de171830f4e8e842e1da.tar.gz
connman-01126286f96856aab6b0de171830f4e8e842e1da.tar.bz2
connman-01126286f96856aab6b0de171830f4e8e842e1da.zip
bluetooth: Add device to hash before registration
During the connman_device_register() procedure a lookup to the bluetooth_devices hash table happens, however the device is not on the hash at this point and the look out fails. If the registration fails, technology_disable() returns the Failed message on D-Bus with the error status zero. That happens because we don't have any device registered. This patch moves the insertion of the device to before the device registration.
-rw-r--r--plugins/bluetooth.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c
index b06460a1..2ab29a68 100644
--- a/plugins/bluetooth.c
+++ b/plugins/bluetooth.c
@@ -660,6 +660,8 @@ static void adapter_properties_reply(DBusPendingCall *call, void *user_data)
if (device != NULL)
goto update;
+ g_hash_table_insert(bluetooth_devices, g_strdup(path), device);
+
ether_aton_r(address, &addr);
snprintf(ident, 13, "%02x%02x%02x%02x%02x%02x",
@@ -680,11 +682,10 @@ static void adapter_properties_reply(DBusPendingCall *call, void *user_data)
if (connman_device_register(device) < 0) {
connman_device_unref(device);
+ g_hash_table_remove(bluetooth_devices, path);
goto done;
}
- g_hash_table_insert(bluetooth_devices, g_strdup(path), device);
-
update:
connman_device_set_string(device, "Address", address);
connman_device_set_string(device, "Name", name);