fixes a broken software beacon miss handler. There is a race to check
vap->iv_bmiss_count == 0 in ieee80211_swbmiss because iv_swbmiss_task is enqueued by taskqueue. Reviewed by: rpaulo
This commit is contained in:
parent
3a64dbc20a
commit
7e62e45f53
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=205140
@ -1432,8 +1432,6 @@ ieee80211_swbmiss(void *arg)
|
||||
} else if (vap->iv_swbmiss_count == 0) {
|
||||
if (vap->iv_bmiss != NULL)
|
||||
ieee80211_runtask(ic, &vap->iv_swbmiss_task);
|
||||
if (vap->iv_bmiss_count == 0) /* don't re-arm timer */
|
||||
return;
|
||||
} else
|
||||
vap->iv_swbmiss_count = 0;
|
||||
callout_reset(&vap->iv_swbmiss, vap->iv_swbmiss_period,
|
||||
|
@ -141,6 +141,8 @@ sta_beacon_miss(struct ieee80211vap *vap)
|
||||
vap->iv_bss->ni_essid, vap->iv_bss->ni_esslen);
|
||||
return;
|
||||
}
|
||||
|
||||
callout_stop(&vap->iv_swbmiss);
|
||||
vap->iv_bmiss_count = 0;
|
||||
vap->iv_stats.is_beacon_miss++;
|
||||
if (vap->iv_roaming == IEEE80211_ROAMING_AUTO) {
|
||||
|
@ -295,6 +295,8 @@ tdma_beacon_miss(struct ieee80211vap *vap)
|
||||
"beacon miss, mode %u state %s\n",
|
||||
vap->iv_opmode, ieee80211_state_name[vap->iv_state]);
|
||||
|
||||
callout_stop(&vap->iv_swbmiss);
|
||||
|
||||
if (ts->tdma_peer != NULL) { /* XXX? can this be null? */
|
||||
ieee80211_notify_node_leave(vap->iv_bss);
|
||||
ts->tdma_peer = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user