Deleted Added
full compact
34c34
< __FBSDID("$FreeBSD: head/sys/net80211/ieee80211_node.c 140441 2005-01-18 19:59:40Z sam $");
---
> __FBSDID("$FreeBSD: head/sys/net80211/ieee80211_node.c 140448 2005-01-18 20:21:29Z sam $");
592,593c592,593
< struct ieee80211_node *ni, *nextbs, *selbs;
< struct ieee80211_node_table *nt;
---
> struct ieee80211_node_table *nt = &ic->ic_scan;
> struct ieee80211_node *ni, *selbs;
598,600d597
< nt = &ic->ic_scan;
< ni = TAILQ_FIRST(&nt->nt_node);
<
614,616c611,612
< for (; ni != NULL; ni = nextbs) {
< ieee80211_ref_node(ni);
< nextbs = TAILQ_NEXT(ni, ni_list);
---
> IEEE80211_NODE_LOCK(nt);
> TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
621d616
< ieee80211_unref_node(&ni);
622a618
> IEEE80211_NODE_UNLOCK(nt);
659c655,656
< if (ni == NULL) {
---
> /* NB: unlocked read should be ok */
> if (TAILQ_FIRST(&nt->nt_node) == NULL) {
680,682c677,678
< for (; ni != NULL; ni = nextbs) {
< ieee80211_ref_node(ni);
< nextbs = TAILQ_NEXT(ni, ni_list);
---
> IEEE80211_NODE_LOCK(nt);
> TAILQ_FOREACH(ni, &nt->nt_node, ni_list) {
692a689,690
> ni->ni_fails++;
> #if 0
694a693
> #endif
700,701c699
< else if (ieee80211_node_compare(ic, ni, selbs) > 0) {
< ieee80211_unref_node(&selbs);
---
> else if (ieee80211_node_compare(ic, ni, selbs) > 0)
703,706d700
< } else
< ieee80211_unref_node(&ni);
< } else {
< ieee80211_unref_node(&ni);
708a703,705
> if (selbs != NULL) /* NB: grab ref while dropping lock */
> (void) ieee80211_ref_node(selbs);
> IEEE80211_NODE_UNLOCK(nt);
712c709
< ieee80211_unref_node(&selbs);
---
> ieee80211_free_node(selbs);