[ https://issues.apache.org/jira/browse/ZOOKEEPER-1643?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13576008#comment-13576008 ]
Michi Mutsuzaki commented on ZOOKEEPER-1643: -------------------------------------------- I didn't write the code, but I agree with Erik and Ben. - For windows, we should use InterlockedExchangeAdd. - For non-windows, we should use __sync_fetch_and_ad Erik, would you be interested in providing a patch? Thanks! --Michi > 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