diff options
author | rpaulo <rpaulo@FreeBSD.org> | 2010-04-09 12:06:19 +0000 |
---|---|---|
committer | rpaulo <rpaulo@FreeBSD.org> | 2010-04-09 12:06:19 +0000 |
commit | 6e781e21dbc7cd56e89be117eca5be95fa79b65b (patch) | |
tree | 4b433dd899472acc3a80500bf822820189e50cc1 /sys/net80211/ieee80211_amrr.c | |
parent | a5b2b30f957074bb4016f69e20d7b2520e658b46 (diff) | |
download | FreeBSD-src-6e781e21dbc7cd56e89be117eca5be95fa79b65b.zip FreeBSD-src-6e781e21dbc7cd56e89be117eca5be95fa79b65b.tar.gz |
Use M_NOWAIT instead of M_WAITOK to avoid race conditions.
MFC after: 1 month
Diffstat (limited to 'sys/net80211/ieee80211_amrr.c')
-rw-r--r-- | sys/net80211/ieee80211_amrr.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/sys/net80211/ieee80211_amrr.c b/sys/net80211/ieee80211_amrr.c index e8eed09..6111058 100644 --- a/sys/net80211/ieee80211_amrr.c +++ b/sys/net80211/ieee80211_amrr.c @@ -110,9 +110,12 @@ amrr_init(struct ieee80211vap *vap) KASSERT(vap->iv_rs == NULL, ("%s called multiple times", __func__)); - vap->iv_rs = malloc(sizeof(struct ieee80211_amrr), M_80211_RATECTL, - M_WAITOK|M_ZERO); - amrr = vap->iv_rs; + amrr = vap->iv_rs = malloc(sizeof(struct ieee80211_amrr), + M_80211_RATECTL, M_NOWAIT|M_ZERO); + if (amrr == NULL) { + if_printf(vap->iv_ifp, "couldn't alloc ratectl structure\n"); + return; + } amrr->amrr_min_success_threshold = IEEE80211_AMRR_MIN_SUCCESS_THRESHOLD; amrr->amrr_max_success_threshold = IEEE80211_AMRR_MAX_SUCCESS_THRESHOLD; amrr_setinterval(vap, 500 /* ms */); @@ -136,9 +139,13 @@ amrr_node_init(struct ieee80211_node *ni) KASSERT(ni->ni_rctls == NULL, ("%s: ni_rctls already initialized", __func__)); - ni->ni_rctls = malloc(sizeof(struct ieee80211_amrr_node), - M_80211_RATECTL, M_WAITOK|M_ZERO); - amn = ni->ni_rctls; + ni->ni_rctls = amn = malloc(sizeof(struct ieee80211_amrr_node), + M_80211_RATECTL, M_NOWAIT|M_ZERO); + if (amn == NULL) { + if_printf(vap->iv_ifp, "couldn't alloc per-node ratectl " + "structure\n"); + return; + } amn->amn_amrr = amrr; amn->amn_success = 0; amn->amn_recovery = 0; |