diff options
Diffstat (limited to 'sys/net80211/ieee80211_node.c')
-rw-r--r-- | sys/net80211/ieee80211_node.c | 62 |
1 files changed, 2 insertions, 60 deletions
diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c index 23661b1..aa92d8e 100644 --- a/sys/net80211/ieee80211_node.c +++ b/sys/net80211/ieee80211_node.c @@ -87,7 +87,6 @@ static void ieee80211_node_table_init(struct ieee80211com *ic, int inact, int keymaxix); static void ieee80211_node_table_reset(struct ieee80211_node_table *, struct ieee80211vap *); -static void ieee80211_node_reclaim(struct ieee80211_node *); static void ieee80211_node_table_cleanup(struct ieee80211_node_table *nt); static void ieee80211_erp_timeout(struct ieee80211com *); @@ -674,7 +673,8 @@ ieee80211_sta_join1(struct ieee80211_node *selbs) vap->iv_bss = selbs; /* NB: caller assumed to bump refcnt */ if (obss != NULL) { copy_bss(selbs, obss); - ieee80211_node_reclaim(obss); + ieee80211_node_decref(obss); /* iv_bss reference */ + ieee80211_free_node(obss); /* station table reference */ obss = NULL; /* NB: guard against later use */ } @@ -1739,64 +1739,6 @@ node_reclaim(struct ieee80211_node_table *nt, struct ieee80211_node *ni) } /* - * Reclaim a (bss) node. Decrement the refcnt and reclaim - * the node if the only other reference to it is in the sta - * table. This is effectively ieee80211_free_node followed - * by node_reclaim when the refcnt is 1 (after the free). - */ -static void -ieee80211_node_reclaim(struct ieee80211_node *ni) -{ - struct ieee80211_node_table *nt = ni->ni_table; - - KASSERT(nt != NULL, ("reclaim node not in table")); - -#ifdef IEEE80211_DEBUG_REFCNT - IEEE80211_DPRINTF(ni->ni_vap, IEEE80211_MSG_NODE, - "%s %p<%s> refcnt %d\n", __func__, ni, - ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni)-1); -#endif - IEEE80211_NODE_LOCK(nt); - if (ieee80211_node_dectestref(ni)) { - /* - * Last reference, reclaim state. - */ - _ieee80211_free_node(ni); - nt = NULL; - } else if (ieee80211_node_refcnt(ni) == 1 && nt->nt_keyixmap != NULL) { - ieee80211_keyix keyix; - /* - * Check for a last reference in the key mapping table. - */ - keyix = ni->ni_ucastkey.wk_rxkeyix; - if (keyix < nt->nt_keyixmax && - nt->nt_keyixmap[keyix] == ni) { - IEEE80211_DPRINTF(ni->ni_vap, - IEEE80211_MSG_NODE, - "%s: %p<%s> clear key map entry %u", __func__, - ni, ether_sprintf(ni->ni_macaddr), keyix); - nt->nt_keyixmap[keyix] = NULL; - ieee80211_node_decref(ni); /* XXX needed? */ - _ieee80211_free_node(ni); - nt = NULL; - } - } - if (nt != NULL && ieee80211_node_refcnt(ni) == 1) { - /* - * Last reference is in the sta table; complete - * the reclaim. This handles bss nodes being - * recycled: the node has two references, one for - * iv_bss and one for the table. After dropping - * the iv_bss ref above we need to reclaim the sta - * table reference. - */ - ieee80211_node_decref(ni); /* NB: be pendantic */ - _ieee80211_free_node(ni); - } - IEEE80211_NODE_UNLOCK(nt); -} - -/* * Node table support. */ |