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);
     }
 }


Reply via email to