From 5ea08ee1129594ac4413de68021a12c2008a2c30 Mon Sep 17 00:00:00 2001 From: benjsc Date: Tue, 27 Nov 2007 09:09:09 +0000 Subject: Fix up a race condition with the callout_stop method in newstate. The call should happen with the driver lock held. We don't hold the driver lock in newstate as it's a separate thread where we can't sleep (and we only call wpi_cmd in async mode). Discovered By: Attillo's callout rework Approved By: mlaier (comentor) --- sys/dev/wpi/if_wpi.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'sys/dev/wpi') diff --git a/sys/dev/wpi/if_wpi.c b/sys/dev/wpi/if_wpi.c index 981fdce..98c5b92 100644 --- a/sys/dev/wpi/if_wpi.c +++ b/sys/dev/wpi/if_wpi.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define VERSION "20071102" +#define VERSION "20071127" #include __FBSDID("$FreeBSD$"); @@ -1331,8 +1331,11 @@ wpi_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg) struct wpi_softc *sc = ifp->if_softc; struct ieee80211_node *ni; int error; + WPI_LOCK_DECL; + WPI_LOCK(sc); callout_stop(&sc->calib_to); + WPI_UNLOCK(sc); switch (nstate) { case IEEE80211_S_SCAN: -- cgit v1.1