summaryrefslogtreecommitdiff
path: root/src/device.c
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@linux.intel.com>2012-01-05 12:55:10 +0200
committerDaniel Wagner <daniel.wagner@bmw-carit.de>2012-01-05 13:18:54 +0100
commita32fa8da488dd7742bdf056605c39e9832aeb876 (patch)
treeff95b66934f0d518dd1898aeb8060bce44f270ba /src/device.c
parent414f0a83700e362fa40e46718a193d903e92fbc4 (diff)
downloadconnman-a32fa8da488dd7742bdf056605c39e9832aeb876.tar.gz
connman-a32fa8da488dd7742bdf056605c39e9832aeb876.tar.bz2
connman-a32fa8da488dd7742bdf056605c39e9832aeb876.zip
device: Disconnect service when disabling device
We should disconnect service instead of disconnecting network when device is disabled. Otherwise service might still have a pointer to network that is no longer valid. Fixes BMC#24592
Diffstat (limited to 'src/device.c')
-rw-r--r--src/device.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/device.c b/src/device.c
index 6a34d406..27673470 100644
--- a/src/device.c
+++ b/src/device.c
@@ -306,8 +306,15 @@ int __connman_device_disable(struct connman_device *device)
clear_scan_trigger(device);
- if (device->network)
- connman_network_set_connected(device->network, FALSE);
+ if (device->network) {
+ struct connman_service *service =
+ __connman_service_lookup_from_network(device->network);
+
+ if (service != NULL)
+ __connman_service_disconnect(service);
+ else
+ connman_network_set_connected(device->network, FALSE);
+ }
err = device->driver->disable(device);
if (err == 0) {