diff options
author | Gustavo Padovan <gustavo.padovan@collabora.co.uk> | 2012-08-09 18:57:25 -0300 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2012-08-10 17:10:10 +0300 |
commit | 01126286f96856aab6b0de171830f4e8e842e1da (patch) | |
tree | e810f7b5544cca037cab56a36e7468a3e1656274 | |
parent | 665eff90e5908188906f7d8b55bfe4eba28eaff2 (diff) | |
download | connman-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.c | 5 |
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); |