summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@linux.intel.com>2013-07-25 16:31:27 +0300
committerZhang zhengguang <zhengguang.zhang@intel.com>2013-08-15 09:08:40 +0800
commitbb057ae7cf1cb028af07ee5a17127e86bcf4a12c (patch)
tree43a8c665af40694ae08828627fbac546204e0a5c
parent4a631b073fc92bc422569d336791c842c389b092 (diff)
downloadconnman-bb057ae7cf1cb028af07ee5a17127e86bcf4a12c.tar.gz
connman-bb057ae7cf1cb028af07ee5a17127e86bcf4a12c.tar.bz2
connman-bb057ae7cf1cb028af07ee5a17127e86bcf4a12c.zip
gsupplicant: Only add interface when wpa_supplicant is in ready state
I noticed following scenario: - hardblock the device - turn on offline mode - turn off hardblock, as offline mode is still on connman will set softblock on - wpa_supplicant generated these state signals in this order: 1. INACTIVE 2. DISABLED - wifi.c cannot handle these events because the wifi pointer is NULL at this point - gsupplicant will then call wifi.c:interface_added(), this will cause the scanning to start but that will fail because we are still in softblocked state (wpa_supplicant returns error) - wifi.c goes now to forever loop i.e., it tries to start scan constantly. Only way to recover is to unblock wifi by turning offline mode off. The fix to this issue is simple, if the interface is not yet ready then gsupplicant will not call wifi.c:interface_added() callback as that is useless anyway. Upstream commit id:70445458847721186622677e2810febbf2f2f454
-rw-r--r--gsupplicant/supplicant.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c
index db13ed6c..a660b8df 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -1729,7 +1729,9 @@ static void interface_property(const char *key, DBusMessageIter *iter,
debug_strvalmap("Mode capability", mode_capa_map,
interface->mode_capa);
- callback_interface_added(interface);
+ if (interface->ready)
+ callback_interface_added(interface);
+
return;
}