From: Avraham Stern Date: Mon, 5 Sep 2016 14:33:03 +0000 (+0300) Subject: Fix PNO restart flow X-Git-Tag: hostap_2_6~4 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=mech_eap.git;a=commitdiff_plain;h=5ac8f8623d8dc1a47626e22a3b5a1b8e147718d2 Fix PNO restart flow PNO is sometimes restarted due to changes in scan parameters (e.g., selected network changed or MAC randomization being enabled/disabled). Restart is done by stopping PNO and immediately starting it again. This may result in the SCHED_SCAN_STOPPED event being received after the request for new PNO, which will make wpa_supplicant believe PNO is not active although it is actually is. As a result, the next request to start PNO will fail because PNO is active and should be stopped first. Fix this by deferring the request to start PNO until the SCHED_SCAN_STOPPED event is received in case sched_scan is being stopped. Signed-off-by: Avraham Stern --- diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index 5f84b21..fb8ebdf 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -2420,6 +2420,13 @@ int wpas_start_pno(struct wpa_supplicant *wpa_s) } } + if (wpa_s->sched_scan_stop_req) { + wpa_printf(MSG_DEBUG, + "Schedule PNO after previous sched scan has stopped"); + wpa_s->pno_sched_pending = 1; + return 0; + } + os_memset(¶ms, 0, sizeof(params)); num_ssid = num_match_ssid = 0;