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