diff options
author | adrian <adrian@FreeBSD.org> | 2011-08-19 15:21:13 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2011-08-19 15:21:13 +0000 |
commit | b31a18eeb421bb3ef0f05f205f940cca8a5b1c1f (patch) | |
tree | 37c8bb63b262d2da65e4b9cfd976928aeddb13be /sys/net80211 | |
parent | a667edfdd169f0e6974d4e5159be1ec14f082bd1 (diff) | |
download | FreeBSD-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)
Diffstat (limited to 'sys/net80211')
-rw-r--r-- | sys/net80211/ieee80211_ht.c | 6 |
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) |