Author: astitcher Date: Tue Aug 11 05:34:59 2009 New Revision: 802990 URL: http://svn.apache.org/viewvc?rev=802990&view=rev Log: Fix for re-entering DispatchHandle::processEvent more than once on disconnection
Modified: qpid/trunk/qpid/cpp/src/qpid/sys/DispatchHandle.cpp qpid/trunk/qpid/cpp/src/qpid/sys/epoll/EpollPoller.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=802990&r1=802989&r2=802990&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/sys/DispatchHandle.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/sys/DispatchHandle.cpp Tue Aug 11 05:34:59 2009 @@ -284,10 +284,7 @@ readableCallback(*this); writableCallback(*this); break; - case Poller::DISCONNECTED: { - ScopedLock<Mutex> lock(stateLock); - poller->unmonitorHandle(*this, Poller::INOUT); - } + case Poller::DISCONNECTED: if (disconnectedCallback) { disconnectedCallback(*this); } Modified: qpid/trunk/qpid/cpp/src/qpid/sys/epoll/EpollPoller.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/epoll/EpollPoller.cpp?rev=802990&r1=802989&r2=802990&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/sys/epoll/EpollPoller.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/sys/epoll/EpollPoller.cpp Tue Aug 11 05:34:59 2009 @@ -575,6 +575,8 @@ // (just not writable), allow us to readable until we get here again if (epe.events & ::EPOLLHUP) { if (eh.isHungup()) { + // Don't set up last Handle so that we don't reset this handle + // when we get back in here return Event(handle, DISCONNECTED); } eh.setHungup(); --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:commits-subscr...@qpid.apache.org