Author: aconway
Date: Tue Nov 11 12:58:59 2008
New Revision: 713165

URL: http://svn.apache.org/viewvc?rev=713165&view=rev
Log:
Fix deadlock when Message::flush() re-enters IncompleteMessageList.

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.cpp

Modified: 
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.cpp?rev=713165&r1=713164&r2=713165&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.cpp 
(original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.cpp Tue 
Nov 11 12:58:59 2008
@@ -47,9 +47,12 @@
         boost::intrusive_ptr<Message>& msg = incomplete.front();
         if (!msg->isEnqueueComplete()) {
             if (sync){
-                msg->flush();
+                {
+                    sys::Mutex::ScopedUnlock u(lock);
+                    msg->flush(); // Can re-enter 
IncompleteMessageList::enqueueComplete
+                }
                 while (!msg->isEnqueueComplete())
-                    lock.wait();
+                       lock.wait();
             } else {
                 //leave the message as incomplete for now
                 return;


Reply via email to