aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArik Nemtsov <arik@wizery.com>2016-11-03 10:30:04 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-11-03 03:00:15 -0700
commitd8314bb08706617d1ed2c6be1a297beed4ad7998 (patch)
tree957771d01fdb4fba90e2105a0731d7ea70fd41c8
parentc61abc4f0c1edd09e0653b0e6c4b2bbf4797c7e4 (diff)
downloadandroid_external_wpa_supplicant_8-d8314bb08706617d1ed2c6be1a297beed4ad7998.tar.gz
android_external_wpa_supplicant_8-d8314bb08706617d1ed2c6be1a297beed4ad7998.tar.bz2
android_external_wpa_supplicant_8-d8314bb08706617d1ed2c6be1a297beed4ad7998.zip
Restart PNO/sched_scan on channel list update.
As the scan channels might need to change when the channel list has been updated by the kernel. Use the simulated sched_scan timeout (wpas_scan_restart_sched_scan()) to handle a possible race where an ongoing sched_scan has stopped asynchronously while trying to restart a new sched_scan. Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com> Git-commit: ebf59eb549827ecfb7a42281721a1af9cfa0d7a1 Git-repo: git://w1.fi/srv/git/hostap.git CRs-fixed: 1085011 Change-Id: I8ec15cae6990e416edba2fe20fddbf86780e138b
-rw-r--r--wpa_supplicant/events.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 22685319..cb51e95e 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -3190,14 +3190,16 @@ static void wpa_supplicant_update_channel_list(
free_hw_features(ifs);
ifs->hw.modes = wpa_drv_get_hw_feature_data(
ifs, &ifs->hw.num_modes, &ifs->hw.flags);
- }
- /* Restart sched_scan with updated channel list */
- if (wpa_s->sched_scanning) {
- wpa_dbg(wpa_s, MSG_DEBUG,
- "Channel list changed restart sched scan.");
- wpa_supplicant_cancel_sched_scan(wpa_s);
- wpa_supplicant_req_scan(wpa_s, 0, 0);
+ /* Restart PNO/sched_scan with updated channel list */
+ if (ifs->pno) {
+ wpas_stop_pno(ifs);
+ wpas_start_pno(ifs);
+ } else if (ifs->sched_scanning && !ifs->pno_sched_pending) {
+ wpa_dbg(ifs, MSG_DEBUG,
+ "Channel list changed - restart sched_scan");
+ wpas_scan_restart_sched_scan(ifs);
+ }
}
wpas_p2p_update_channel_list(wpa_s, WPAS_P2P_CHANNEL_UPDATE_DRIVER);