When a wlan interface is removed we call proper method in
supplicant dbus interface. As the return message from supplicant
might come very late, we must not use the wifi pointer as
user data in interface remove callback. This is because the wifi
pointer might be removed before the answer comes from supplicant and
the callback user data pointer would not be valid at that point.
---
plugins/wifi.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/plugins/wifi.c b/plugins/wifi.c
index 2fe1479..2070bb9 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -219,7 +219,9 @@ static void interface_remove_callback(int result,
GSupplicantInterface *interface,
void *user_data)
{
- struct wifi_data *wifi = user_data;
+ struct wifi_data *wifi;
+
+ wifi = g_supplicant_interface_get_data(interface);
DBG("result %d wifi %p", result, wifi);
@@ -265,7 +267,7 @@ static int wifi_disable(struct connman_device *device)
ret = g_supplicant_interface_remove(wifi->interface,
interface_remove_callback,
- wifi);
+ NULL);
if (ret < 0)
return ret;
--
1.7.1
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman