diff --git a/src/ap/sta_info.c b/src/ap/sta_info.c index 4592cc85f..670b83447 100644 --- a/src/ap/sta_info.c +++ b/src/ap/sta_info.c @@ -494,7 +494,7 @@ void ap_sta_replenish_timeout(struct hostapd_data *hapd, struct sta_info *sta, u32 session_timeout) { if (eloop_replenish_timeout(session_timeout, 0, - ap_handle_session_timer, hapd, sta)) { + ap_handle_session_timer, hapd, sta) == 1) { hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211, HOSTAPD_LEVEL_DEBUG, "setting session timeout " "to %d seconds", session_timeout); diff --git a/src/ap/wps_hostapd.c b/src/ap/wps_hostapd.c index 9edf0f5dc..4c94210e9 100644 --- a/src/ap/wps_hostapd.c +++ b/src/ap/wps_hostapd.c @@ -295,7 +295,8 @@ void hostapd_wps_eap_completed(struct hostapd_data *hapd) * timeout to happen after EAP completion rather than the originally * scheduled 100 ms after new configuration became known. */ - if (eloop_deplete_timeout(0, 0, wps_reload_config, hapd->iface, NULL)) + if (eloop_deplete_timeout(0, 0, wps_reload_config, hapd->iface, NULL) == + 1) wpa_printf(MSG_DEBUG, "WPS: Reschedule immediate configuration reload"); } diff --git a/src/utils/eloop.c b/src/utils/eloop.c index e983edcfb..f83a2327a 100644 --- a/src/utils/eloop.c +++ b/src/utils/eloop.c @@ -623,10 +623,11 @@ int eloop_deplete_timeout(unsigned int req_secs, unsigned int req_usecs, user_data); return 1; } + return 0; } } - return 0; + return -1; } @@ -654,10 +655,11 @@ int eloop_replenish_timeout(unsigned int req_secs, unsigned int req_usecs, user_data); return 1; } + return 0; } } - return 0; + return -1; } diff --git a/src/utils/eloop.h b/src/utils/eloop.h index d3980fa49..07b8c0dc3 100644 --- a/src/utils/eloop.h +++ b/src/utils/eloop.h @@ -229,7 +229,8 @@ int eloop_is_timeout_registered(eloop_timeout_handler handler, * @handler: Matching callback function * @eloop_data: Matching eloop_data * @user_data: Matching user_data - * Returns: 1 if the timeout is depleted, 0 if no change is made + * Returns: 1 if the timeout is depleted, 0 if no change is made, -1 if no + * timeout matched * * Find a registered matching timeout. If found, * deplete the timeout if remaining time is more than the requested time. @@ -245,7 +246,8 @@ int eloop_deplete_timeout(unsigned int req_secs, unsigned int req_usecs, * @handler: Matching callback function * @eloop_data: Matching eloop_data * @user_data: Matching user_data - * Returns: 1 if the timeout is replenished, 0 if no change is made + * Returns: 1 if the timeout is replenished, 0 if no change is made, -1 if no + * timeout matched * * Find a registered matching timeout. If found, * replenish the timeout if remaining time is less than the requested time. diff --git a/src/utils/eloop_win.c b/src/utils/eloop_win.c index a1f999648..de47fb218 100644 --- a/src/utils/eloop_win.c +++ b/src/utils/eloop_win.c @@ -378,10 +378,11 @@ int eloop_deplete_timeout(unsigned int req_secs, unsigned int req_usecs, user_data); return 1; } + return 0; } } - return 0; + return -1; } @@ -409,10 +410,11 @@ int eloop_replenish_timeout(unsigned int req_secs, unsigned int req_usecs, user_data); return 1; } + return 0; } } - return 0; + return -1; } diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index c45130fef..da827bd7e 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -888,17 +888,19 @@ void wpa_supplicant_update_scan_int(struct wpa_supplicant *wpa_s, int sec) */ void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec) { - if (eloop_deplete_timeout(sec, usec, wpa_supplicant_scan, wpa_s, NULL)) - { - wpa_dbg(wpa_s, MSG_DEBUG, "Rescheduling scan request: %d sec %d usec", + int res = eloop_deplete_timeout(sec, usec, wpa_supplicant_scan, wpa_s, + NULL); + if (res == 1) { + wpa_dbg(wpa_s, MSG_DEBUG, "Rescheduling scan request: %d.%06d sec", sec, usec); - return; + } else if (res == 0) { + wpa_dbg(wpa_s, MSG_DEBUG, "Ignore new scan request for %d.%06d sec since an earlier request is scheduled to trigger sooner", + sec, usec); + } else { + wpa_dbg(wpa_s, MSG_DEBUG, "Setting scan request: %d.%06d sec", + sec, usec); + eloop_register_timeout(sec, usec, wpa_supplicant_scan, wpa_s, NULL); } - - wpa_dbg(wpa_s, MSG_DEBUG, "Setting scan request: %d sec %d usec", - sec, usec); - eloop_cancel_timeout(wpa_supplicant_scan, wpa_s, NULL); - eloop_register_timeout(sec, usec, wpa_supplicant_scan, wpa_s, NULL); }