Author: gsim
Date: Wed Nov 14 01:34:51 2007
New Revision: 594812

URL: http://svn.apache.org/viewvc?rev=594812&view=rev
Log:
Fixed locking (lock was not being released for invocation on callback due to 
being locked twice but unlocked only once)


Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/sys/Serializer.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/sys/Serializer.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/sys/Serializer.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/sys/Serializer.cpp?rev=594812&r1=594811&r2=594812&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/sys/Serializer.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/sys/Serializer.cpp Wed Nov 14 
01:34:51 2007
@@ -51,11 +51,20 @@
         lock.notify();
 }
 
-void SerializerBase::run() {
+bool SerializerBase::running() {
+    Mutex::ScopedLock l(lock);
+    return state != SHUTDOWN;
+}
+
+void SerializerBase::wait() {
     Mutex::ScopedLock l(lock);
-    while (state != SHUTDOWN) {
+    lock.wait();
+}
+
+void SerializerBase::run() {
+    while (running()) {
         dispatch();
-        lock.wait();
+        wait();
     }
 }
 

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/sys/Serializer.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/sys/Serializer.h?rev=594812&r1=594811&r2=594812&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/sys/Serializer.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/sys/Serializer.h Wed Nov 14 01:34:51 
2007
@@ -61,6 +61,8 @@
     void notifyWorker();
     void run();
     virtual bool empty() = 0;
+    bool running();
+    void wait();
 
     Monitor lock;
     State state;


Reply via email to