diff options
| author | Andrew Stitcher <astitcher@apache.org> | 2010-05-18 21:33:15 +0000 |
|---|---|---|
| committer | Andrew Stitcher <astitcher@apache.org> | 2010-05-18 21:33:15 +0000 |
| commit | bbf31a9b3113ad6d37ed24d2ce767dd5f830afa3 (patch) | |
| tree | 3a3f276254da99f54076d5ecbc35be1dcbb2d239 /cpp/src/qpid | |
| parent | dc481af66b9ec3765416955fefbd80b5df6107f7 (diff) | |
| download | qpid-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.cpp | 6 |
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); |
