summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-12-05 16:19:32 +0000
committerGordon Sim <gsim@apache.org>2007-12-05 16:19:32 +0000
commitbea8ade7644112cab4105e612d5650efe789adc0 (patch)
tree8f3750267060988f7de1b4537e094a7d1acbc372 /qpid/cpp/src
parent03d02254059d56f7b742ebeadd33d3c9e2acd625 (diff)
downloadqpid-python-bea8ade7644112cab4105e612d5650efe789adc0.tar.gz
Avoid holding lock while making the flush calls (can cause deadlocking)
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@601391 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/broker/PersistableMessage.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/qpid/cpp/src/qpid/broker/PersistableMessage.cpp b/qpid/cpp/src/qpid/broker/PersistableMessage.cpp
index a00a623988..f3ca574503 100644
--- a/qpid/cpp/src/qpid/broker/PersistableMessage.cpp
+++ b/qpid/cpp/src/qpid/broker/PersistableMessage.cpp
@@ -28,12 +28,18 @@ using namespace qpid::broker;
void PersistableMessage::flush()
{
- sys::ScopedLock<sys::Mutex> l(storeLock);
- if (store) {
- for (syncList::iterator i = synclist.begin(); i != synclist.end(); ++i) {
- store->flush(*(*i));
- }
+ syncList copy;
+ {
+ sys::ScopedLock<sys::Mutex> 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));
+ }
}