You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2010/11/12 20:08:04 UTC
svn commit: r1034523 - /qpid/trunk/qpid/cpp/src/qpid/sys/DispatchHandle.cpp
Author: gsim
Date: Fri Nov 12 19:08:04 2010
New Revision: 1034523
URL: http://svn.apache.org/viewvc?rev=1034523&view=rev
Log:
QPID-2674: prevent callbacks after doDelete has been called
Modified:
qpid/trunk/qpid/cpp/src/qpid/sys/DispatchHandle.cpp
Modified: qpid/trunk/qpid/cpp/src/qpid/sys/DispatchHandle.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/DispatchHandle.cpp?rev=1034523&r1=1034522&r2=1034523&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/DispatchHandle.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/DispatchHandle.cpp Fri Nov 12 19:08:04 2010
@@ -304,6 +304,15 @@ void DispatchHandle::processEvent(Poller
// (because we use a copy from before the previous callbacks we won't
// do anything yet that was just added)
while (callbacks.size() > 0) {
+ {
+ ScopedLock<Mutex> lock(stateLock);
+ switch (state) {
+ case DELETING:
+ goto finishcallbacks;
+ default:
+ break;
+ }
+ }
Callback cb = callbacks.front();
assert(cb);
cb(*this);
@@ -315,6 +324,7 @@ void DispatchHandle::processEvent(Poller
// It would be nice to clean up and delete ourselves here, but we can't
}
+finishcallbacks:
{
ScopedLock<Mutex> lock(stateLock);
switch (state) {
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org