diff options
author | Jukka Rissanen <jukka.rissanen@linux.intel.com> | 2012-01-05 12:55:10 +0200 |
---|---|---|
committer | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2012-01-05 13:18:54 +0100 |
commit | a32fa8da488dd7742bdf056605c39e9832aeb876 (patch) | |
tree | ff95b66934f0d518dd1898aeb8060bce44f270ba /src/device.c | |
parent | 414f0a83700e362fa40e46718a193d903e92fbc4 (diff) | |
download | connman-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.c | 11 |
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) { |