From 71f61e7240d5f1c220cef88f88fde45878fe2e5f Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Wed, 5 Dec 2007 16:19:32 +0000 Subject: Avoid holding lock while making the flush calls (can cause deadlocking) git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@601391 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/PersistableMessage.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'cpp/src') diff --git a/cpp/src/qpid/broker/PersistableMessage.cpp b/cpp/src/qpid/broker/PersistableMessage.cpp index a00a623988..f3ca574503 100644 --- a/cpp/src/qpid/broker/PersistableMessage.cpp +++ b/cpp/src/qpid/broker/PersistableMessage.cpp @@ -28,12 +28,18 @@ using namespace qpid::broker; void PersistableMessage::flush() { - sys::ScopedLock l(storeLock); - if (store) { - for (syncList::iterator i = synclist.begin(); i != synclist.end(); ++i) { - store->flush(*(*i)); - } + syncList copy; + { + sys::ScopedLock l(storeLock); + if (store) { + copy = synclist; + } else { + return;//early exit as nothing to do + } } + for (syncList::iterator i = copy.begin(); i != copy.end(); ++i) { + store->flush(*(*i)); + } } -- cgit v1.2.1