Index: src/atomic.h ================================================================== --- src/atomic.h +++ src/atomic.h @@ -69,11 +69,11 @@ : "r"(i), "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicAdd32Barrier(i, p); + return OSAtomicAdd32(i, p); #else # error of_atomic_int_add not implemented! #endif } @@ -105,11 +105,11 @@ : "r"(i), "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicAdd32Barrier(i, p); + return OSAtomicAdd32(i, p); #else # error of_atomic_int32_add not implemented! #endif } @@ -152,13 +152,13 @@ ); return (void*)i; #elif defined(OF_HAVE_OSATOMIC) # ifdef __LP64__ - return (void*)OSAtomicAdd64Barrier(i, (int64_t*)p); + return (void*)OSAtomicAdd64(i, (int64_t*)p); # else - return (void*)OSAtomicAdd32Barrier(i, (int32_t*)p); + return (void*)OSAtomicAdd32(i, (int32_t*)p); # endif #else # error of_atomic_ptr_add not implemented! #endif } @@ -206,11 +206,11 @@ : "r"(i), "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicAdd32Barrier(-i, p); + return OSAtomicAdd32(-i, p); #else # error of_atomic_int_sub not implemented! #endif } @@ -243,11 +243,11 @@ : "r"(i), "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicAdd32Barrier(-i, p); + return OSAtomicAdd32(-i, p); #else # error of_atomic_int32_sub not implemented! #endif } @@ -292,13 +292,13 @@ ); return (void*)i; #elif defined(OF_HAVE_OSATOMIC) # ifdef __LP64__ - return (void*)OSAtomicAdd64Barrier(-i, (int64_t*)p); + return (void*)OSAtomicAdd64(-i, (int64_t*)p); # else - return (void*)OSAtomicAdd32Barrier(-i, (int32_t*)p); + return (void*)OSAtomicAdd32(-i, (int32_t*)p); # endif #else # error of_atomic_ptr_sub not implemented! #endif } @@ -352,11 +352,11 @@ : "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicIncrement32Barrier(p); + return OSAtomicIncrement32(p); #else # error of_atomic_int_inc not implemented! #endif } @@ -394,11 +394,11 @@ : "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicIncrement32Barrier(p); + return OSAtomicIncrement32(p); #else # error of_atomic_int32_inc not implemented! #endif } @@ -451,11 +451,11 @@ : "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicDecrement32Barrier(p); + return OSAtomicDecrement32(p); #else # error of_atomic_int_dec not implemented! #endif } @@ -493,11 +493,11 @@ : "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicDecrement32Barrier(p); + return OSAtomicDecrement32(p); #else # error of_atomic_int32_dec not implemented! #endif } @@ -552,11 +552,11 @@ : "r"(i), "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicOr32Barrier(i, p); + return OSAtomicOr32(i, p); #else # error of_atomic_int_or not implemented! #endif } @@ -593,11 +593,11 @@ : "r"(i), "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicOr32Barrier(i, p); + return OSAtomicOr32(i, p); #else # error of_atomic_int32_or not implemented! #endif } @@ -652,11 +652,11 @@ : "r"(i), "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicAnd32Barrier(i, p); + return OSAtomicAnd32(i, p); #else # error of_atomic_int_and not implemented! #endif } @@ -693,11 +693,11 @@ : "r"(i), "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicAnd32Barrier(i, p); + return OSAtomicAnd32(i, p); #else # error of_atomic_int32_and not implemented! #endif } @@ -752,11 +752,11 @@ : "r"(i), "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicXor32Barrier(i, p); + return OSAtomicXor32(i, p); #else # error of_atomic_int_xor not implemented! #endif } @@ -793,11 +793,11 @@ : "r"(i), "r"(p) ); return i; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicXor32Barrier(i, p); + return OSAtomicXor32(i, p); #else # error of_atomic_int32_xor not implemented! #endif } @@ -848,11 +848,11 @@ : "cc" ); return r; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicCompareAndSwapIntBarrier(o, n, p); + return OSAtomicCompareAndSwapInt(o, n, p); #else # error of_atomic_int_cmpswap not implemented! #endif } @@ -903,11 +903,11 @@ : "cc" ); return r; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicCompareAndSwap32Barrier(o, n, p); + return OSAtomicCompareAndSwap32(o, n, p); #else # error of_atomic_int32_cmpswap not implemented! #endif } @@ -959,11 +959,11 @@ : "cc" ); return r; #elif defined(OF_HAVE_OSATOMIC) - return OSAtomicCompareAndSwapPtrBarrier(o, n, p); + return OSAtomicCompareAndSwapPtr(o, n, p); #else # error of_atomic_ptr_cmpswap not implemented! #endif } Index: src/threading.m ================================================================== --- src/threading.m +++ src/threading.m @@ -30,10 +30,13 @@ void of_once(of_once_t *control, void (*func)(void)) { if (of_atomic_int_cmpswap(control, 0, 1)) { func(); + + of_memory_barrier(); + of_atomic_int_inc(control); } else while (*control == 1) of_thread_yield(); }