summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorKenneth Anthony Giusti <kgiusti@apache.org>2012-05-31 14:11:14 +0000
committerKenneth Anthony Giusti <kgiusti@apache.org>2012-05-31 14:11:14 +0000
commite82126bf9dc196ec0cbe19f990a9da98b5ab9508 (patch)
tree3a95f6a28bb5b41c0d0723e0de1731733900dfa1 /qpid/cpp/src
parentcce69f8b8e8af07a84accff09799af9e8778d619 (diff)
downloadqpid-python-e82126bf9dc196ec0cbe19f990a9da98b5ab9508.tar.gz
QPID-4031: fix deadlock by moving timer cancel outside of scoped lock.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1344734 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/broker/Link.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/qpid/cpp/src/qpid/broker/Link.cpp b/qpid/cpp/src/qpid/broker/Link.cpp
index e354b4e425..1f6e6ac856 100644
--- a/qpid/cpp/src/qpid/broker/Link.cpp
+++ b/qpid/cpp/src/qpid/broker/Link.cpp
@@ -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();