summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2011-08-19 15:21:13 +0000
committeradrian <adrian@FreeBSD.org>2011-08-19 15:21:13 +0000
commitb31a18eeb421bb3ef0f05f205f940cca8a5b1c1f (patch)
tree37c8bb63b262d2da65e4b9cfd976928aeddb13be
parenta667edfdd169f0e6974d4e5159be1ec14f082bd1 (diff)
downloadFreeBSD-src-b31a18eeb421bb3ef0f05f205f940cca8a5b1c1f.zip
FreeBSD-src-b31a18eeb421bb3ef0f05f205f940cca8a5b1c1f.tar.gz
Correctly handle BAR TX failures.
On a TX failure, ic_raw_xmit will still call ieee80211_node_free(). There's no need to call it here. Submitted by: moonlightakkiy@yahoo.ca Approved by: re (kib)
-rw-r--r--sys/net80211/ieee80211_ht.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c
index e6dbbf2..c49a178 100644
--- a/sys/net80211/ieee80211_ht.c
+++ b/sys/net80211/ieee80211_ht.c
@@ -2309,11 +2309,15 @@ ieee80211_send_bar(struct ieee80211_node *ni,
ni, "send BAR: tid %u ctl 0x%x start %u (attempt %d)",
tid, barctl, seq, tap->txa_attempts);
+ /*
+ * ic_raw_xmit will free the node reference
+ * regardless of queue/TX success or failure.
+ */
ret = ic->ic_raw_xmit(ni, m, NULL);
if (ret != 0) {
/* xmit failed, clear state flag */
tap->txa_flags &= ~IEEE80211_AGGR_BARPEND;
- goto bad;
+ return ret;
}
/* XXX hack against tx complete happening before timer is started */
if (tap->txa_flags & IEEE80211_AGGR_BARPEND)
OpenPOWER on IntegriCloud