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