Blob Blame History Raw
diff -up zookeeper-3.4.5/src/c/src/mt_adaptor.c.atomic zookeeper-3.4.5/src/c/src/mt_adaptor.c
--- zookeeper-3.4.5/src/c/src/mt_adaptor.c.atomic	2013-06-14 09:58:27.000000000 +0200
+++ zookeeper-3.4.5/src/c/src/mt_adaptor.c	2013-06-14 10:00:09.000000000 +0200
@@ -482,27 +482,7 @@ int32_t inc_ref_counter(zhandle_t* zh,in
 
 int32_t fetch_and_add(volatile int32_t* operand, int incr)
 {
-#ifndef WIN32
-    int32_t result;
-    asm __volatile__(
-         "lock xaddl %0,%1\n"
-         : "=r"(result), "=m"(*(int *)operand)
-         : "0"(incr)
-         : "memory");
-   return result;
-#else
-    volatile int32_t result;
-    _asm
-    {
-        mov eax, operand; //eax = v;
-       mov ebx, incr; // ebx = i;
-        mov ecx, 0x0; // ecx = 0;
-        lock xadd dword ptr [eax], ecx; 
-       lock xadd dword ptr [eax], ebx; 
-        mov result, ecx; // result = ebx;        
-     }
-     return result;    
-#endif
+    return __atomic_add_fetch(operand, incr, __ATOMIC_SEQ_CST);
 }
 
 // make sure the static xid is initialized before any threads started