diff options
Diffstat (limited to 'cpp/src/qpid/broker/Queue.cpp')
-rw-r--r-- | cpp/src/qpid/broker/Queue.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp index 9586f6b994..3065041424 100644 --- a/cpp/src/qpid/broker/Queue.cpp +++ b/cpp/src/qpid/broker/Queue.cpp @@ -155,12 +155,14 @@ Consumer* Queue::allocate() bool Queue::dispatch(QueuedMessage& msg) { Consumer* c = allocate(); - int start = next; + Consumer* first = c; while(c){ if(c->deliver(msg)) { return true; + } else { + c = allocate(); + if (c == first) c = 0; } - c = next == start ? 0 : allocate(); } return false; } @@ -170,7 +172,10 @@ void Queue::dispatch(){ while(true){ { Mutex::ScopedLock locker(messageLock); - if (messages.empty()) break; + if (messages.empty()) { + QPID_LOG(debug, "No messages to dispatch on queue '" << name << "'"); + break; + } msg = messages.front(); } if( msg.payload->isEnqueueComplete() && dispatch(msg) ) { |