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:
Ben Greear 2011-02-21 21:47:46 +02:00 committed by Jouni Malinen
parent 6fc34d9fe5
commit 4c9695be8f
1 changed files with 5 additions and 1 deletions

View File

@ -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)
{
wpa_printf(MSG_DEBUG, "WPS ER: Terminated");
eloop_terminate();
if (--callbacks_pending <= 0)
eloop_terminate();
}
#endif /* CONFIG_WPS_ER */
@ -1555,6 +1558,7 @@ int wpas_wps_terminate_pending(struct wpa_supplicant *wpa_s)
{
#ifdef CONFIG_WPS_ER
if (wpa_s->wps_er) {
callbacks_pending++;
wps_er_deinit(wpa_s->wps_er, wpas_wps_terminate_cb, wpa_s);
wpa_s->wps_er = NULL;
return 1;