pipe: Get the p_atomic_dec_zero logic right this time.
authorJosé Fonseca <jfonseca@vmware.com>
Fri, 17 Apr 2009 17:40:46 +0000 (18:40 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Fri, 17 Apr 2009 17:40:46 +0000 (18:40 +0100)
src/gallium/include/pipe/p_atomic.h

index ed5f665512d4837351d1a370de4668103f528c6a..0c3fbae428c1984787415ce3cc1829a00d7be707 100644 (file)
@@ -225,7 +225,7 @@ p_atomic_cmpxchg(struct pipe_atomic *v, int32_t old, int32_t _new)
 
 struct pipe_atomic
 {
-   long count;
+   volatile long count;
 };
 
 #define p_atomic_set(_v, _i) ((_v)->count = (_i))
@@ -234,7 +234,7 @@ struct pipe_atomic
 static INLINE boolean
 p_atomic_dec_zero(struct pipe_atomic *v)
 {
-   return InterlockedDecrement(&v->count) != 0;
+   return InterlockedDecrement(&v->count) == 0;
 }
 
 static INLINE void
@@ -270,7 +270,6 @@ p_atomic_cmpxchg(struct pipe_atomic *v, int32_t old, int32_t _new)
  * Add an assembly port instead. It may abort and
  * doesn't destroy used mutexes.
  */
-#warning "using mutex-based fallback for pipe_atomic"
 
 struct pipe_atomic {
    pipe_mutex mutex;