Below is a patch for:
http://bugs.meego.com/show_bug.cgi?id=11684

g_supplicant_unregister first destroys the interface table and then invokes 
system_killed callback which will trigger wifi device driver removal. 
wifi_remove will now set it's interface data to NULL but the 
GSupplicantInterface has already been freed and hence the issue.

Invoking the system_killed callback before destroying the interface table in 
gsupplicant will fix this issue. 

---
 gsupplicant/supplicant.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c
index 8d2c15f..22a9e7d 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -2630,6 +2630,9 @@ void g_supplicant_unregister(const GSupplicantCallbacks 
*callbacks)
                bss_mapping = NULL;
        }
 
+       if (system_available == TRUE)
+               callback_system_killed();
+
        if (interface_table != NULL) {
                g_hash_table_foreach(interface_table,   
                                        unregister_remove_interface, NULL);
@@ -2637,9 +2640,6 @@ void g_supplicant_unregister(const GSupplicantCallbacks 
*callbacks)
                interface_table = NULL;
        }
 
-       if (system_available == TRUE)
-               callback_system_killed();
-
        if (connection != NULL) {
                dbus_connection_unref(connection);
                connection = NULL;
-- 
1.7.2.2
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to