Reschedule scan from wpas_stop_pno if it was postponed
authorDmitry Shmidt <dimitrysh@google.com>
Mon, 30 Mar 2015 20:44:11 +0000 (13:44 -0700)
committerJouni Malinen <j@w1.fi>
Wed, 1 Apr 2015 15:21:36 +0000 (18:21 +0300)
This reschedules the postponed scan request (if such a request is
pending) from EVENT_SCHED_SCAN_STOPPED event handler to speed up
scanning after PNO/sched_scan stop has been requested.

Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
wpa_supplicant/events.c

index f5f3032..a81cead 100644 (file)
@@ -3164,6 +3164,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
                          union wpa_event_data *data)
 {
        struct wpa_supplicant *wpa_s = ctx;
+       int resched;
 
        if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED &&
            event != EVENT_INTERFACE_ENABLED &&
@@ -3730,6 +3731,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
        case EVENT_SCHED_SCAN_STOPPED:
                wpa_s->pno = 0;
                wpa_s->sched_scanning = 0;
+               resched = wpa_s->scanning;
                wpa_supplicant_notify_scanning(wpa_s, 0);
 
                if (wpa_s->wpa_state == WPA_INTERFACE_DISABLED)
@@ -3744,6 +3746,8 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
                } else if (wpa_s->pno_sched_pending) {
                        wpa_s->pno_sched_pending = 0;
                        wpas_start_pno(wpa_s);
+               } else if (resched) {
+                       wpa_supplicant_req_scan(wpa_s, 0, 0);
                }
 
                break;