Date: Wed, 10 Aug 2005 22:38:01 GMT From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 81809 for review Message-ID: <200508102238.j7AMc1rt070595@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=81809 Change 81809 by sam@sam_ebb on 2005/08/10 22:37:39 Bandaid deadlock: on tx timeout we're in the callout callback when we clock the state machine, but this results in a call to callout_drain which blocks because the callout is active. Workaround for now is to use callout_stop which won't block but this potentially leaves us open to a race. Affected files ... .. //depot/projects/wifi/sys/net80211/ieee80211_proto.c#36 edit Differences ... ==== //depot/projects/wifi/sys/net80211/ieee80211_proto.c#36 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_proto.c,v 1.22 2005/07/22 21:11:26 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_proto.c,v 1.23 2005/08/10 16:22:29 sam Exp $"); /* * IEEE 802.11 protocol support. @@ -949,7 +949,7 @@ IEEE80211_DPRINTF(ic, IEEE80211_MSG_STATE, "%s: %s -> %s\n", __func__, ieee80211_state_name[ostate], ieee80211_state_name[nstate]); ic->ic_state = nstate; /* state transition */ - callout_drain(&ic->ic_mgtsend); + callout_stop(&ic->ic_mgtsend); /* XXX callout_drain */ if (ostate != IEEE80211_S_SCAN) ieee80211_cancel_scan(ic); /* background scan */ ni = ic->ic_bss; /* NB: no reference held */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508102238.j7AMc1rt070595>