You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by mi...@apache.org on 2013/02/20 06:24:31 UTC
svn commit: r1448007 - in /zookeeper/trunk: CHANGES.txt
src/c/src/mt_adaptor.c
Author: michim
Date: Wed Feb 20 05:24:31 2013
New Revision: 1448007
URL: http://svn.apache.org/r1448007
Log:
ZOOKEEPER-1643. Windows: fetch_and_add not 64bit-compatible, may not be correct (Erik Anderson via michim)
Modified:
zookeeper/trunk/CHANGES.txt
zookeeper/trunk/src/c/src/mt_adaptor.c
Modified: zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/trunk/CHANGES.txt?rev=1448007&r1=1448006&r2=1448007&view=diff
==============================================================================
--- zookeeper/trunk/CHANGES.txt (original)
+++ zookeeper/trunk/CHANGES.txt Wed Feb 20 05:24:31 2013
@@ -505,6 +505,9 @@ IMPROVEMENTS:
ZOOKEEPER-1601. document changes for multi-threaded CommitProcessor
and NIOServerCnxn (Thawan Kooburat via phunt)
+ ZOOKEEPER-1643. Windows: fetch_and_add not 64bit-compatible, may not be
+ correct (Erik Anderson via michim)
+
Release 3.4.0 -
Non-backward compatible changes:
Modified: zookeeper/trunk/src/c/src/mt_adaptor.c
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/c/src/mt_adaptor.c?rev=1448007&r1=1448006&r2=1448007&view=diff
==============================================================================
--- zookeeper/trunk/src/c/src/mt_adaptor.c (original)
+++ zookeeper/trunk/src/c/src/mt_adaptor.c Wed Feb 20 05:24:31 2013
@@ -484,25 +484,9 @@ 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;
+ return __sync_fetch_and_add(operand, incr);
#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;
+ return InterlockedExchangeAdd(operand, incr);
#endif
}