diff options
author | Alan Conway <aconway@apache.org> | 2007-03-27 15:36:39 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2007-03-27 15:36:39 +0000 |
commit | 847ee577e23fbdd2175709a08a7160e8b2c1f464 (patch) | |
tree | e4962c5246c91a08ef635f2c68e06b82cfb100ee /cpp/lib/common/sys/ProducerConsumer.cpp | |
parent | fb14a2042dd5bdae5a5c79b8cd4f1ad87e59bee1 (diff) | |
download | qpid-python-847ee577e23fbdd2175709a08a7160e8b2c1f464.tar.gz |
Refactored client::Message to be independent of all Basic class concepts
and client::IncomingMessage to handle 0-9 style references and appends.
* cpp/lib/client/ClientMessage.cpp: Made independent of Basic class.
* cpp/lib/client/IncomingMessage.cpp: Refactored to handle references/appends.
* cpp/lib/client/BasicMessageChannel.cpp: Refactored to use new IncomingMessage
Thread safety fixes:
* cpp/lib/client/ResponseHandler.h: Remove stateful functions.
* cpp/lib/client/ClientChannel.cpp: use new ResponseHandler interface.
Minor cleanup:
* cpp/lib/common/framing/BasicHeaderProperties.cpp: use DeliveryMode enum.
* cpp/tests/HeaderTest.cpp: use DeliveryMode enum.
* cpp/tests/MessageTest.cpp: use DeliveryMode enum.
* cpp/lib/common/shared_ptr.h: #include <boost/cast.hpp> for convenience.
* cpp/lib/common/sys/ThreadSafeQueue.h: Changed "stop" "shutdown"
* cpp/lib/common/sys/ProducerConsumer.h: Changed "stop" "shutdown"
* cpp/tests/ClientChannelTest.cpp (TestCase): Removed debug couts.
* cpp/tests/setup: valgrind --demangle=yes by default.
* cpp/tests/topictest: sleep to hack around startup race.
* cpp/lib/broker/BrokerQueue.cpp (configure): Fixed memory leak.
Removed/updated FIXME comments in:
* cpp/lib/broker/BrokerMessage.cpp:
* cpp/lib/broker/BrokerMessageBase.h:
* cpp/lib/broker/InMemoryContent.cpp:
* cpp/lib/common/framing/MethodContext.h:
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@522956 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/lib/common/sys/ProducerConsumer.cpp')
-rw-r--r-- | cpp/lib/common/sys/ProducerConsumer.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/cpp/lib/common/sys/ProducerConsumer.cpp b/cpp/lib/common/sys/ProducerConsumer.cpp index 3f6156f230..7a0249f666 100644 --- a/cpp/lib/common/sys/ProducerConsumer.cpp +++ b/cpp/lib/common/sys/ProducerConsumer.cpp @@ -27,12 +27,12 @@ namespace sys { // // ================ ProducerConsumer ProducerConsumer::ProducerConsumer(size_t init_items) - : items(init_items), waiters(0), stopped(false) + : items(init_items), waiters(0), shutdownFlag(false) {} -void ProducerConsumer::stop() { +void ProducerConsumer::shutdown() { Mutex::ScopedLock l(monitor); - stopped = true; + shutdownFlag = true; monitor.notifyAll(); // Wait for waiting consumers to wake up. while (waiters > 0) @@ -55,16 +55,16 @@ ProducerConsumer::Lock::Lock(ProducerConsumer& p) : pc(p), lock(p.monitor), status(INCOMPLETE) {} bool ProducerConsumer::Lock::isOk() const { - return !pc.isStopped() && status==INCOMPLETE; + return !pc.isShutdown() && status==INCOMPLETE; } void ProducerConsumer::Lock::checkOk() const { - assert(!pc.isStopped()); + assert(!pc.isShutdown()); assert(status == INCOMPLETE); } ProducerConsumer::Lock::~Lock() { - assert(status != INCOMPLETE || pc.isStopped()); + assert(status != INCOMPLETE || pc.isShutdown()); } void ProducerConsumer::Lock::confirm() { @@ -96,7 +96,7 @@ ProducerConsumer::ConsumerLock::ConsumerLock(ProducerConsumer& p) : Lock(p) { if (isOk()) { ScopedIncrement<size_t> inc(pc.waiters); - while (pc.items == 0 && !pc.stopped) { + while (pc.items == 0 && !pc.shutdownFlag) { pc.monitor.wait(); } } @@ -115,7 +115,7 @@ ProducerConsumer::ConsumerLock::ConsumerLock( else { Time deadline = now() + timeout; ScopedIncrement<size_t> inc(pc.waiters); - while (pc.items == 0 && !pc.stopped) { + while (pc.items == 0 && !pc.shutdownFlag) { if (!pc.monitor.wait(deadline)) { status = TIMEOUT; return; @@ -126,9 +126,9 @@ ProducerConsumer::ConsumerLock::ConsumerLock( } ProducerConsumer::ConsumerLock::~ConsumerLock() { - if (pc.isStopped()) { + if (pc.isShutdown()) { if (pc.waiters == 0) - pc.monitor.notifyAll(); // All waiters woken, notify stop thread(s) + pc.monitor.notifyAll(); // Notify shutdown thread(s) } else if (status==CONFIRMED) { pc.items--; |