summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Queue.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-08-07 13:45:24 +0000
committerAlan Conway <aconway@apache.org>2008-08-07 13:45:24 +0000
commited5d40386e04fd75ea8051102abcb3a1f1f53ddd (patch)
tree906434b6856197020bd711bedfd0c634134b66cd /cpp/src/qpid/broker/Queue.cpp
parent469dbf73971b247af0659f8dfdf1b15c6724d11a (diff)
downloadqpid-python-ed5d40386e04fd75ea8051102abcb3a1f1f53ddd.tar.gz
Patch from Gordon Sim to fix issues with hasOutput implementation.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@683617 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Queue.cpp')
-rw-r--r--cpp/src/qpid/broker/Queue.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp
index 3b447e97f2..acab1e06f1 100644
--- a/cpp/src/qpid/broker/Queue.cpp
+++ b/cpp/src/qpid/broker/Queue.cpp
@@ -212,9 +212,30 @@ bool Queue::getNextMessage(QueuedMessage& m, Consumer& c)
}
}
-bool Queue::empty() const {
+bool Queue::checkForMessages(Consumer& c)
+{
Mutex::ScopedLock locker(messageLock);
- return messages.empty();
+ if (messages.empty()) {
+ //no message available, register consumer for notification
+ //when this changes
+ addListener(c);
+ return false;
+ } else {
+ QueuedMessage msg = messages.front();
+ if (store && !msg.payload->isEnqueueComplete()) {
+ //though a message is on the queue, it has not yet been
+ //enqueued and so is not available for consumption yet,
+ //register consumer for notification when this changes
+ addListener(c);
+ return false;
+ } else {
+ //check that consumer has sufficient credit for the
+ //message (if it does not, no need to register it for
+ //notification as the consumer itself will handle the
+ //credit allocation required to change this condition).
+ return c.accept(msg.payload);
+ }
+ }
}
bool Queue::consumeNextMessage(QueuedMessage& m, Consumer& c)