diff options
| author | Ken Giusti <kgiusti@apache.org> | 2012-05-31 14:11:14 +0000 |
|---|---|---|
| committer | Ken Giusti <kgiusti@apache.org> | 2012-05-31 14:11:14 +0000 |
| commit | 754d71a141ba3aa3602fda199a4c72952b79a12e (patch) | |
| tree | 39dc086510d2ae8d728412ef8fa8025c9230a0d7 /cpp/src/qpid/broker/Link.cpp | |
| parent | c115a13a5168d91ac306d2460f6337964183dbe8 (diff) | |
| download | qpid-python-754d71a141ba3aa3602fda199a4c72952b79a12e.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/qpid@1344734 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Link.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/Link.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/cpp/src/qpid/broker/Link.cpp b/cpp/src/qpid/broker/Link.cpp index e354b4e425..1f6e6ac856 100644 --- a/cpp/src/qpid/broker/Link.cpp +++ b/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(); |
