summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2010-05-18 21:33:15 +0000
committerAndrew Stitcher <astitcher@apache.org>2010-05-18 21:33:15 +0000
commitbbf31a9b3113ad6d37ed24d2ce767dd5f830afa3 (patch)
tree3a3f276254da99f54076d5ecbc35be1dcbb2d239 /cpp/src/qpid
parentdc481af66b9ec3765416955fefbd80b5df6107f7 (diff)
downloadqpid-python-bbf31a9b3113ad6d37ed24d2ce767dd5f830afa3.tar.gz
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
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/sys/epoll/EpollPoller.cpp6
1 files changed, 6 insertions, 0 deletions
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<Mutex> l(interruptHandle.impl->lock);