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]

Reply via email to