From: Ben Greear Date: Mon, 21 Feb 2011 19:47:46 +0000 (+0200) Subject: WPS ER: Stop eloop only on the last terminate_cb X-Git-Tag: hostap-1-bp~576 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4c9695be8f2f377cd9ae500b74df6d9f41f6d91c;p=thirdparty%2Fhostap.git 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. --- diff --git a/wpa_supplicant/wps_supplicant.c b/wpa_supplicant/wps_supplicant.c index 8100f1cc1..d39d2cd71 100644 --- a/wpa_supplicant/wps_supplicant.c +++ b/wpa_supplicant/wps_supplicant.c @@ -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;