diff options
| author | Gordon Sim <gsim@apache.org> | 2014-06-03 19:04:39 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2014-06-03 19:04:39 +0000 |
| commit | 4f4262e5e206c1f64c08149169c057e39bdfd5a5 (patch) | |
| tree | 802d278e3ddf794961e9dcd7bf4a73cb1c5289ea /cpp | |
| parent | a777ec5ed8303f07ed633d3e7e628e9af9d29d0f (diff) | |
| download | qpid-python-4f4262e5e206c1f64c08149169c057e39bdfd5a5.tar.gz | |
QPID-5793: prevent deadlock between timer and consume
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1599765 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
| -rw-r--r-- | cpp/src/qpid/broker/Queue.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp index 78ee37607e..e91123eb6a 100644 --- a/cpp/src/qpid/broker/Queue.cpp +++ b/cpp/src/qpid/broker/Queue.cpp @@ -540,6 +540,7 @@ void Queue::consume(Consumer::shared_ptr c, bool requestExclusive, const framing::FieldTable& arguments, const std::string& connectionId, const std::string& userId) { + boost::intrusive_ptr<qpid::sys::TimerTask> t; { Mutex::ScopedLock locker(messageLock); if (c->preAcquires()) { @@ -568,12 +569,13 @@ void Queue::consume(Consumer::shared_ptr c, bool requestExclusive, if(c->isCounted()) { //reset auto deletion timer if necessary if (settings.autoDeleteDelay && autoDeleteTask) { - autoDeleteTask->cancel(); + t = autoDeleteTask; } observeConsumerAdd(*c, locker); } } + if (t) t->cancel(); if (mgmtObject != 0 && c->isCounted()) { mgmtObject->inc_consumerCount(); } |
