Author: shuston Date: Mon Nov 26 23:57:08 2012 New Revision: 1413945 URL: http://svn.apache.org/viewvc?rev=1413945&view=rev Log: Merge QPID-4424 fix to 0.20.
Modified: qpid/branches/0.20/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp (contents, props changed) Modified: qpid/branches/0.20/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp URL: http://svn.apache.org/viewvc/qpid/branches/0.20/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp?rev=1413945&r1=1413944&r2=1413945&view=diff ============================================================================== --- qpid/branches/0.20/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp (original) +++ qpid/branches/0.20/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp Mon Nov 26 23:57:08 2012 @@ -52,13 +52,14 @@ private: PollableCondition& parent; boost::shared_ptr<sys::Poller> poller; LONG isSet; + LONG isDispatching; }; PollableConditionPrivate::PollableConditionPrivate(const sys::PollableCondition::Callback& cb, sys::PollableCondition& parent, const boost::shared_ptr<sys::Poller>& poller) : IOHandle(INVALID_SOCKET, boost::bind(&PollableConditionPrivate::dispatch, this, _1)), - cb(cb), parent(parent), poller(poller), isSet(0) + cb(cb), parent(parent), poller(poller), isSet(0), isDispatching(0) { } @@ -77,7 +78,12 @@ void PollableConditionPrivate::poke() void PollableConditionPrivate::dispatch(windows::AsynchIoResult *result) { delete result; // Poller::monitorHandle() allocates this + // If isDispatching is already set, just return. Else, enter. + if (::InterlockedCompareExchange(&isDispatching, 1, 0) == 1) + return; cb(parent); + LONG oops = ::InterlockedDecrement(&isDispatching); // Result must be 0 + assert(!oops); if (isSet) poke(); } Propchange: qpid/branches/0.20/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Mon Nov 26 23:57:08 2012 @@ -0,0 +1,8 @@ +/qpid/branches/0.5.x-dev/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp:892761,894875 +/qpid/branches/0.6-release-windows-installer/cpp/src/qpid/sys/windows/PollableCondition.cpp:926803 +/qpid/branches/0.6-release-windows-installer/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp:926803,927233 +/qpid/branches/QPID-2519/cpp/src/qpid/sys/windows/PollableCondition.cpp:1072051-1079078 +/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp:805429-825319 +/qpid/branches/qpid-2935/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp:1061302-1072333 +/qpid/branches/qpid-3346/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp:1144319-1179855 +/qpid/trunk/qpid/cpp/src/qpid/sys/windows/PollableCondition.cpp:1413889 --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org