From 439efd1eac41bed0606f6da66a0879b8f46c4df7 Mon Sep 17 00:00:00 2001 From: Paul Stewart Date: Thu, 31 Mar 2011 18:06:09 +0300 Subject: [PATCH] bgscan_simple: Reschedule first fast scan If the scan interval switches to the short interval soon after a scan, bgscan_simple should not immediately scan again. However, it should also make sure that the next scan occurs no later than the new, short scan interval. Signed-off-by: Paul Stewart --- wpa_supplicant/bgscan_simple.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/wpa_supplicant/bgscan_simple.c b/wpa_supplicant/bgscan_simple.c index a62dac159..eedc96147 100644 --- a/wpa_supplicant/bgscan_simple.c +++ b/wpa_supplicant/bgscan_simple.c @@ -226,6 +226,18 @@ static void bgscan_simple_notify_signal_change(void *priv, int above, os_get_time(&now); if (now.sec > data->last_bgscan.sec + 1) scan = 1; + else if (data->last_bgscan.sec + data->long_interval > + now.sec + data->scan_interval) { + /* + * Restart scan interval timer if currently scheduled + * scan is too far in the future. + */ + eloop_cancel_timeout(bgscan_simple_timeout, data, + NULL); + eloop_register_timeout(data->scan_interval, 0, + bgscan_simple_timeout, data, + NULL); + } } else if (data->scan_interval == data->short_interval && above) { wpa_printf(MSG_DEBUG, "bgscan simple: Start using long bgscan " "interval");