Author: gsim
Date: Thu Oct 25 10:36:02 2007
New Revision: 588286
URL: http://svn.apache.org/viewvc?rev=588286&view=rev
Log:
Fixes to handling of non-acquired subscribers
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=588286&r1=588285&r2=588286&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Thu Oct 25 10:36:02
2007
@@ -252,11 +252,16 @@
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 @@
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);
}
}