summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211.c
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2009-06-02 18:55:27 +0000
committersam <sam@FreeBSD.org>2009-06-02 18:55:27 +0000
commit9bb9aeed7f4aae60f4e8a69cf41cf99e5b363d08 (patch)
treeb221762e9fc4c4c59b20fb489607955a7beb5b10 /sys/net80211/ieee80211.c
parentba346476006e8b1ec5b31c5107724957bb0f03c6 (diff)
downloadFreeBSD-src-9bb9aeed7f4aae60f4e8a69cf41cf99e5b363d08.zip
FreeBSD-src-9bb9aeed7f4aae60f4e8a69cf41cf99e5b363d08.tar.gz
move if_detach to the top of ieee80211_ifdetach to close various races
Reviewed by: jhb
Diffstat (limited to 'sys/net80211/ieee80211.c')
-rw-r--r--sys/net80211/ieee80211.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c
index b7cca98..93bb0ae 100644
--- a/sys/net80211/ieee80211.c
+++ b/sys/net80211/ieee80211.c
@@ -313,6 +313,8 @@ ieee80211_ifdetach(struct ieee80211com *ic)
struct ifnet *ifp = ic->ic_ifp;
struct ieee80211vap *vap;
+ if_detach(ifp);
+
while ((vap = TAILQ_FIRST(&ic->ic_vaps)) != NULL)
ieee80211_vap_destroy(vap);
ieee80211_waitfor_parent(ic);
@@ -329,11 +331,10 @@ ieee80211_ifdetach(struct ieee80211com *ic)
ieee80211_crypto_detach(ic);
ieee80211_power_detach(ic);
ieee80211_node_detach(ic);
- ifmedia_removeall(&ic->ic_media);
+ ifmedia_removeall(&ic->ic_media);
taskqueue_free(ic->ic_tq);
IEEE80211_LOCK_DESTROY(ic);
- if_detach(ifp);
}
/*
OpenPOWER on IntegriCloud