You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Erik Anderson (JIRA)" <ji...@apache.org> on 2013/02/09 02:45:12 UTC

[jira] [Created] (ZOOKEEPER-1643) Windows: fetch_and_add not 64bit-compatible, may not be correct

Erik Anderson created ZOOKEEPER-1643:
----------------------------------------

             Summary: Windows: fetch_and_add not 64bit-compatible, may not be correct
                 Key: ZOOKEEPER-1643
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1643
             Project: ZooKeeper
          Issue Type: Bug
          Components: c client
    Affects Versions: 3.3.3
         Environment: Windows 7
Microsoft Visual Studio 2005
            Reporter: Erik Anderson


Note: While I am using a really old version of ZK, I did do enough "SVN Blame" operations to realize that this code hasn't changed.

I am currently attempting to compile the C client under MSVC 2005 arch=x64.  There are three things I can see with fetch_and_add() inside of /src/c/src/mt_adapter.c

(1) MSVC 2005 64bit will not compile inline _asm sections.  I'm moderately sure this code is x86-specific so I'm unsure whether it should attempt to either.

(2) The Windows intrinsic InterlockedExchangeAdd [http://msdn.microsoft.com/en-us/library/windows/desktop/ms683597(v=vs.85).aspx] appears to do the same thing this code is attempting to do

(3) I'm really rusty on my assembly, but why are we doing two separate XADD operations here, and is the code as-written anything approaching atomicity?

If you want an official patch I likely can do an SVN checkout and submit a patch the replaces the entire #else on lines 495-505 with a "return InterlockedExchangeAdd(operand, incr);"

Usually when I'm scratching my head this badly there's something I'm missing though.  As far as I can tell there has been no prior discussion on this code.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira