diff options
author | Gordon Sim <gsim@apache.org> | 2007-10-25 17:36:02 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2007-10-25 17:36:02 +0000 |
commit | 9271207afbc94b9d61bf9188b8623f60297e6ad8 (patch) | |
tree | e0a925369b9e99278b664ca1b381a66eea86d5a9 /cpp | |
parent | d732910c4b7a27696cecbc34937df87a3296765a (diff) | |
download | qpid-python-9271207afbc94b9d61bf9188b8623f60297e6ad8.tar.gz |
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
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/src/qpid/broker/Queue.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
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); } } |