From 9271207afbc94b9d61bf9188b8623f60297e6ad8 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Thu, 25 Oct 2007 17:36:02 +0000 Subject: Fixes to handling of non-acquired subscribers git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@588286 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/Queue.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'cpp/src') diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp index 2444684d7e..ef1358feb9 100644 --- a/cpp/src/qpid/broker/Queue.cpp +++ b/cpp/src/qpid/broker/Queue.cpp @@ -252,11 +252,16 @@ void Queue::serviceBrowser(Consumer::ptr browser) bool Queue::seek(QueuedMessage& msg, const framing::SequenceNumber& position) { Mutex::ScopedLock locker(messageLock); if (!messages.empty() && messages.back().position > position) { - uint index = (position - messages.front().position) + 1; - if (index < messages.size()) { - msg = messages[index]; + if (position < messages.front().position) { + msg = messages.front(); return true; - } + } else { + uint index = (position - messages.front().position) + 1; + if (index < messages.size()) { + msg = messages[index]; + return true; + } + } } return false; } @@ -280,6 +285,12 @@ void Queue::consume(Consumer::ptr c, bool requestExclusive){ if (c->preAcquires()) { acquirers.push_back(c); } else { + Mutex::ScopedLock locker(messageLock); + if (messages.empty()) { + c->position = SequenceNumber(sequence.getValue() - 1); + } else { + c->position = SequenceNumber(messages.front().position.getValue() - 1); + } browsers.push_back(c); } } -- cgit v1.2.1