[haiku-commits] r34823 - haiku/trunk/src/libs/compat/freebsd_wlan/net80211

  • From: coling@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 30 Dec 2009 02:00:51 +0100 (CET)

Author: colin
Date: 2009-12-30 02:00:51 +0100 (Wed, 30 Dec 2009)
New Revision: 34823
Changeset: http://dev.haiku-os.org/changeset/34823/haiku

Modified:
   haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.c
Log:
Found a better solution for implementing ieee80211_node_dectestref().
Now the reference count get accessed only once, leading to true atomarity.


Modified: haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.c
===================================================================
--- haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.c 
2009-12-30 00:45:16 UTC (rev 34822)
+++ haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.c 
2009-12-30 01:00:51 UTC (rev 34823)
@@ -397,8 +397,6 @@
 /*
  * Decrements the reference-counter and
  * tests whether it became zero.
- * NB: The negation of atomic_add is not atomar. Must work until sth. better is
- *     found.
  *
  * @return 1 reference-counter became zero
  * @return 0 reference-counter didn't became zero
@@ -406,9 +404,8 @@
 int
 ieee80211_node_dectestref(struct ieee80211_node* ni)
 {
-       // XXX need equivalent of atomic_dec_and_test
-       atomic_add((vint32*)&ni->ni_refcnt, -1);
-       return !atomic_add((vint32*)&ni->ni_refcnt, 0);
+       // atomic_add returns old value
+       return 1 == atomic_add((vint32*)&ni->ni_refcnt, -1);
 }
 
 


Other related posts: