device: Disconnect service when disabling device
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Thu, 5 Jan 2012 10:55:10 +0000 (12:55 +0200)
committerDaniel Wagner <daniel.wagner@bmw-carit.de>
Thu, 5 Jan 2012 12:18:54 +0000 (13:18 +0100)
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

src/device.c

index 6a34d40..2767347 100644 (file)
@@ -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) {