Skip to content

Commit

Permalink
ZOOKEEPER-1643. Windows: fetch_and_add not 64bit-compatible, may not …
Browse files Browse the repository at this point in the history
…be correct (Erik Anderson via michim)

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/trunk@1448007 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
Michi Mutsuzaki committed Feb 20, 2013
1 parent 66fc7fe commit 46b565e
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 18 deletions.
3 changes: 3 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
20 changes: 2 additions & 18 deletions src/c/src/mt_adaptor.c
Original file line number Diff line number Diff line change
Expand Up @@ -484,25 +484,9 @@ int32_t inc_ref_counter(zhandle_t* zh,int i)
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
}

Expand Down

0 comments on commit 46b565e

Please sign in to comment.