From bbf31a9b3113ad6d37ed24d2ce767dd5f830afa3 Mon Sep 17 00:00:00 2001 From: Andrew Stitcher Date: Tue, 18 May 2010 21:33:15 +0000 Subject: Fix the behaviour of the EpollPoller when shutdowns and interrupts interact git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@945899 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/sys/epoll/EpollPoller.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'cpp/src/qpid') diff --git a/cpp/src/qpid/sys/epoll/EpollPoller.cpp b/cpp/src/qpid/sys/epoll/EpollPoller.cpp index d7f64f3b4c..7b0d0aaa7f 100644 --- a/cpp/src/qpid/sys/epoll/EpollPoller.cpp +++ b/cpp/src/qpid/sys/epoll/EpollPoller.cpp @@ -536,6 +536,12 @@ Poller::Event Poller::wait(Duration timeout) { // Check if this is an interrupt PollerPrivate::InterruptHandle& interruptHandle = impl->interruptHandle; if (dataPtr == &interruptHandle) { + // If we are shutting down we need to rearm the shutdown interrupt to + // ensure everyone still sees it. It's okay that this might be overridden + // below as we will be back here if it is. + if (impl->isShutdown) { + impl->interruptAll(); + } PollerHandle* wrappedHandle = 0; { ScopedLock l(interruptHandle.impl->lock); -- cgit v1.2.1