wifi: network_remove: Clear network pointer in wifi
authorDaniel Wagner <daniel.wagner@bmw-carit.de>
Thu, 4 Aug 2011 15:35:37 +0000 (17:35 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Thu, 4 Aug 2011 16:05:24 +0000 (18:05 +0200)
When a network is destroyed we also have to remove the pointer
from the wifi data structure.

connmand[25303]: plugins/wifi.c:network_remove() network 0x69c350
connmand[25303]: src/network.c:connman_network_unref() network 0x69c350 name bmwnet02 refcount 1
connmand[25303]: src/network.c:connman_network_unref() network 0x69c350 name bmwnet02 refcount 0
connmand[25303]: src/network.c:network_destruct() network 0x69c350 name XXXXX

[...]

connmand[25303]: plugins/wifi.c:interface_state() wifi 0x699d60 interface state 1
connmand[25303]: plugins/wifi.c:is_idle() state 9
connmand[25303]: src/network.c:connman_network_set_associating() network 0x69c350 associating 0
connmand[25303]: src/network.c:connman_network_set_connected() network 0x69c350 connected 0

Fixes BMC#22307

plugins/wifi.c

index 8b7a97ce1abf81a09c471a207436b701687dbb75..469ec67b5265f88b94ad026e359bbd74bc9220d2 100644 (file)
@@ -333,7 +333,19 @@ static int network_probe(struct connman_network *network)
 
 static void network_remove(struct connman_network *network)
 {
+       struct connman_device *device = connman_network_get_device(network);
+       struct wifi_data *wifi;
+
        DBG("network %p", network);
+
+       wifi = connman_device_get_data(device);
+       if (wifi == NULL)
+               return;
+
+       if (wifi->network != network)
+               return;
+
+       wifi->network = NULL;
 }
 
 static void connect_callback(int result, GSupplicantInterface *interface,