WPS ER: Stop eloop only on the last terminate_cb
This allows all WPS ER instances to be cleaned up properly if more than one interface has an active WPS ER when wpa_supplicant is being killed.
This commit is contained in:
parent
6fc34d9fe5
commit
4c9695be8f
1 changed files with 5 additions and 1 deletions
|
@ -1543,10 +1543,13 @@ int wpas_wps_er_config(struct wpa_supplicant *wpa_s, const char *uuid,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int callbacks_pending = 0;
|
||||||
|
|
||||||
static void wpas_wps_terminate_cb(void *ctx)
|
static void wpas_wps_terminate_cb(void *ctx)
|
||||||
{
|
{
|
||||||
wpa_printf(MSG_DEBUG, "WPS ER: Terminated");
|
wpa_printf(MSG_DEBUG, "WPS ER: Terminated");
|
||||||
eloop_terminate();
|
if (--callbacks_pending <= 0)
|
||||||
|
eloop_terminate();
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_WPS_ER */
|
#endif /* CONFIG_WPS_ER */
|
||||||
|
|
||||||
|
@ -1555,6 +1558,7 @@ int wpas_wps_terminate_pending(struct wpa_supplicant *wpa_s)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_WPS_ER
|
#ifdef CONFIG_WPS_ER
|
||||||
if (wpa_s->wps_er) {
|
if (wpa_s->wps_er) {
|
||||||
|
callbacks_pending++;
|
||||||
wps_er_deinit(wpa_s->wps_er, wpas_wps_terminate_cb, wpa_s);
|
wps_er_deinit(wpa_s->wps_er, wpas_wps_terminate_cb, wpa_s);
|
||||||
wpa_s->wps_er = NULL;
|
wpa_s->wps_er = NULL;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in a new issue