static void wlan_node_dec_free(bss_t *ni) { ieee80211_node_decref(ni); if (ieee80211_node_refcnt(ni) == 0) { wlan_node_free(ni); } }
void ieee80211_release_node(struct ieee80211com *ic, struct ieee80211_node *ni) { IEEE80211_DPRINTF(("%s %s refcnt %d\n", __func__, ether_sprintf(ni->ni_macaddr), ni->ni_refcnt)); if (ieee80211_node_decref(ni) == 0 && ni->ni_state == IEEE80211_STA_COLLECT) { IEEE80211_NODE_LOCK_BH(ic); ieee80211_free_node(ic, ni); IEEE80211_NODE_UNLOCK_BH(ic); } }
void ieee80211_release_node(struct ieee80211com *ic, struct ieee80211_node *ni) { int s; DPRINTF(("%s refcnt %u\n", ether_sprintf(ni->ni_macaddr), ni->ni_refcnt)); s = splnet(); if (ieee80211_node_decref(ni) == 0 && ni->ni_state == IEEE80211_STA_COLLECT) { ieee80211_free_node(ic, ni); } splx(s); }
void ath_txfrag_cleanup(struct ath_softc *sc, ath_bufhead *frags, struct ieee80211_node *ni) { struct ath_buf *bf, *next; ATH_TXBUF_LOCK_ASSERT(sc); STAILQ_FOREACH_SAFE(bf, frags, bf_list, next) { /* NB: bf assumed clean */ STAILQ_REMOVE_HEAD(frags, bf_list); STAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list); ieee80211_node_decref(ni); }
void wlan_node_ret_n_remove(struct ieee80211_node_table *nt, bss_t *ni) { IEEE80211_NODE_LOCK(nt); ieee80211_node_decref(ni); if (ieee80211_node_refcnt(ni) == 0) { wlan_node_free(ni); } else { wlan_node_reclaim(nt, ni); } IEEE80211_NODE_UNLOCK(nt); }