summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-10-25 17:36:02 +0000
committerGordon Sim <gsim@apache.org>2007-10-25 17:36:02 +0000
commit9271207afbc94b9d61bf9188b8623f60297e6ad8 (patch)
treee0a925369b9e99278b664ca1b381a66eea86d5a9 /cpp
parentd732910c4b7a27696cecbc34937df87a3296765a (diff)
downloadqpid-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.cpp19
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);
}
}