Author: gsim
Date: Tue Jun 3 19:04:39 2014
New Revision: 1599765
URL: http://svn.apache.org/r1599765
Log:
QPID-5793: prevent deadlock between timer and consume
Modified:
qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=1599765&r1=1599764&r2=1599765&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Tue Jun 3 19:04:39 2014
@@ -540,6 +540,7 @@ void Queue::consume(Consumer::shared_ptr
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
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();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]