summaryrefslogtreecommitdiff
path: root/cpp/lib/common/sys/ProducerConsumer.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-03-27 15:36:39 +0000
committerAlan Conway <aconway@apache.org>2007-03-27 15:36:39 +0000
commit847ee577e23fbdd2175709a08a7160e8b2c1f464 (patch)
treee4962c5246c91a08ef635f2c68e06b82cfb100ee /cpp/lib/common/sys/ProducerConsumer.cpp
parentfb14a2042dd5bdae5a5c79b8cd4f1ad87e59bee1 (diff)
downloadqpid-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.cpp20
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--;