wpa_supplicant_event_scan_results(wpa_s, data);
wpa_s->own_scan_running = 0;
wpa_s->external_scan_running = 0;
+ radio_work_check_next(wpa_s);
break;
#endif /* CONFIG_NO_SCAN_PROCESSING */
case EVENT_ASSOCINFO:
return;
}
- if (wpa_s->external_scan_running) {
- struct os_reltime now, diff;
- os_get_reltime(&now);
- os_reltime_sub(&now, &wpa_s->scan_start_time, &diff);
- if (diff.sec < 30) {
- wpa_dbg(wpa_s, MSG_DEBUG, "Externally triggered scan running - Reschedule the incoming scan req");
- wpa_supplicant_req_scan(wpa_s, 1, 0);
- return;
- }
- }
-
if (!wpa_supplicant_enabled_networks(wpa_s) &&
wpa_s->scan_req == NORMAL_SCAN_REQ) {
wpa_dbg(wpa_s, MSG_DEBUG, "No enabled networks - do not scan");
struct wpa_radio *radio = eloop_ctx;
struct wpa_radio_work *work;
struct os_reltime now, diff;
+ struct wpa_supplicant *wpa_s;
work = dl_list_first(&radio->work, struct wpa_radio_work, list);
if (work == NULL)
if (work->started)
return; /* already started and still in progress */
+ wpa_s = dl_list_first(&radio->ifaces, struct wpa_supplicant,
+ radio_list);
+ if (wpa_s && wpa_s->external_scan_running) {
+ wpa_printf(MSG_DEBUG, "Delay radio work start until externally triggered scan completes");
+ return;
+ }
+
os_get_reltime(&now);
os_reltime_sub(&now, &work->time, &diff);
wpa_dbg(work->wpa_s, MSG_DEBUG, "Starting radio work '%s'@%p after %ld.%06ld second wait",
}
-static void radio_work_check_next(struct wpa_supplicant *wpa_s)
+void radio_work_check_next(struct wpa_supplicant *wpa_s)
{
struct wpa_radio *radio = wpa_s->radio;
void radio_work_done(struct wpa_radio_work *work);
void radio_remove_unstarted_work(struct wpa_supplicant *wpa_s,
const char *type);
+void radio_work_check_next(struct wpa_supplicant *wpa_s);
struct wpa_connect_work {
unsigned int sme:1;