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;