summaryrefslogtreecommitdiff
path: root/plugins
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 /plugins
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.
Diffstat (limited to 'plugins')
-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);