From 4ead7cfd5d7dfe2f80ffe5b744291b2e149321eb Mon Sep 17 00:00:00 2001 From: "Kanchanapally, Vidyullatha" Date: Mon, 19 Oct 2015 19:30:34 +0530 Subject: [PATCH] Abort an ongoing scan before connect Connect radio work is sometimes delayed for a considerable duration if there is an ongoing scan radio work. To avoid these delays abort the ongoing scan on that interface before queuing a connect request. Upon a scan done indication from the driver, connect radio work will be scheduled. Signed-off-by: Jouni Malinen --- wpa_supplicant/scan.c | 11 +++++++++++ wpa_supplicant/scan.h | 1 + wpa_supplicant/sme.c | 2 ++ wpa_supplicant/wpa_supplicant.c | 2 ++ 4 files changed, 16 insertions(+) diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index 076766ea2..a39922fd5 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -2465,3 +2465,14 @@ int wpas_mac_addr_rand_scan_set(struct wpa_supplicant *wpa_s, wpa_s->mac_addr_rand_enable |= type; return 0; } + + +int wpas_abort_ongoing_scan(struct wpa_supplicant *wpa_s) +{ + if (wpa_s->scan_work && wpa_s->own_scan_running) { + wpa_dbg(wpa_s, MSG_DEBUG, "Abort an ongoing scan"); + return wpa_drv_abort_scan(wpa_s); + } + + return 0; +} diff --git a/wpa_supplicant/scan.h b/wpa_supplicant/scan.h index 7650f5a25..0f1c8e498 100644 --- a/wpa_supplicant/scan.h +++ b/wpa_supplicant/scan.h @@ -54,5 +54,6 @@ void wpas_mac_addr_rand_scan_clear(struct wpa_supplicant *wpa_s, int wpas_mac_addr_rand_scan_set(struct wpa_supplicant *wpa_s, unsigned int type, const u8 *addr, const u8 *mask); +int wpas_abort_ongoing_scan(struct wpa_supplicant *wpa_s); #endif /* SCAN_H */ diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c index f2e5a43b9..2a3a728b2 100644 --- a/wpa_supplicant/sme.c +++ b/wpa_supplicant/sme.c @@ -632,6 +632,8 @@ void sme_authenticate(struct wpa_supplicant *wpa_s, radio_remove_works(wpa_s, "sme-connect", 0); } + wpas_abort_ongoing_scan(wpa_s); + cwork = os_zalloc(sizeof(*cwork)); if (cwork == NULL) return; diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index 920c28133..94b5eff34 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -1706,6 +1706,8 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s, return; } + wpas_abort_ongoing_scan(wpa_s); + cwork = os_zalloc(sizeof(*cwork)); if (cwork == NULL) return;