diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index 8f28f8095..e82458345 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -3379,15 +3379,11 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, * Start a new sched scan to continue searching for more SSIDs * either if timed out or PNO schedule scan is pending. */ - if (wpa_s->sched_scan_timed_out || wpa_s->pno_sched_pending) { - - if (wpa_supplicant_req_sched_scan(wpa_s) < 0 && - wpa_s->pno_sched_pending) { - wpa_msg(wpa_s, MSG_ERROR, "Failed to schedule PNO"); - } else if (wpa_s->pno_sched_pending) { - wpa_s->pno_sched_pending = 0; - wpa_s->pno = 1; - } + if (wpa_s->sched_scan_timed_out) { + wpa_supplicant_req_sched_scan(wpa_s); + } else if (wpa_s->pno_sched_pending) { + wpa_s->pno_sched_pending = 0; + wpas_start_pno(wpa_s); } break; diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index d44e4494b..8e35fcc3c 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -1822,6 +1822,9 @@ int wpas_start_pno(struct wpa_supplicant *wpa_s) struct wpa_ssid *ssid; struct wpa_driver_scan_params params; + if (!wpa_s->sched_scan_supported) + return -1; + if (wpa_s->pno || wpa_s->pno_sched_pending) return 0; @@ -1894,6 +1897,8 @@ int wpas_start_pno(struct wpa_supplicant *wpa_s) os_free(params.filter_ssids); if (ret == 0) wpa_s->pno = 1; + else + wpa_msg(wpa_s, MSG_ERROR, "Failed to schedule PNO"); return ret; } @@ -1902,11 +1907,12 @@ int wpas_stop_pno(struct wpa_supplicant *wpa_s) { int ret = 0; - if (wpa_s->pno || wpa_s->sched_scanning) { - wpa_s->pno = 0; - ret = wpa_supplicant_stop_sched_scan(wpa_s); - } + if (!wpa_s->pno) + return 0; + ret = wpa_supplicant_stop_sched_scan(wpa_s); + + wpa_s->pno = 0; wpa_s->pno_sched_pending = 0; if (wpa_s->wpa_state == WPA_SCANNING)