You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2012/05/31 16:11:14 UTC

svn commit: r1344734 - /qpid/trunk/qpid/cpp/src/qpid/broker/Link.cpp

Author: kgiusti
Date: Thu May 31 14:11:14 2012
New Revision: 1344734

URL: http://svn.apache.org/viewvc?rev=1344734&view=rev
Log:
QPID-4031: fix deadlock by moving timer cancel outside of scoped lock.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/Link.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Link.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Link.cpp?rev=1344734&r1=1344733&r2=1344734&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Link.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Link.cpp Thu May 31 14:11:14 2012
@@ -377,6 +377,8 @@ void Link::closed(int, std::string text)
 void Link::destroy ()
 {
     Bridges toDelete;
+
+    timerTask->cancel();    // call prior to locking so maintenance visit can finish
     {
         Mutex::ScopedLock mutex(lock);
 
@@ -395,9 +397,8 @@ void Link::destroy ()
         for (Bridges::iterator i = created.begin(); i != created.end(); i++)
             toDelete.push_back(*i);
         created.clear();
-
-        timerTask->cancel();
     }
+
     // Now delete all bridges on this link (don't hold the lock for this).
     for (Bridges::iterator i = toDelete.begin(); i != toDelete.end(); i++)
         (*i)->close();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org