You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by cc...@apache.org on 2008/10/11 20:24:50 UTC

svn commit: r703704 - in /incubator/qpid/trunk/qpid/cpp/src: qpid/broker/Queue.cpp tests/QueueTest.cpp

Author: cctrieloff
Date: Sat Oct 11 11:24:50 2008
New Revision: 703704

URL: http://svn.apache.org/viewvc?rev=703704&view=rev
Log:
QPID-1306

- Added aquire safety check + test.


Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
    incubator/qpid/trunk/qpid/cpp/src/tests/QueueTest.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=703704&r1=703703&r2=703704&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Sat Oct 11 11:24:50 2008
@@ -202,7 +202,8 @@
     Mutex::ScopedLock locker(messageLock);
     QPID_LOG(debug, "attempting to acquire " << msg.position);
     for (Messages::iterator i = messages.begin(); i != messages.end(); i++) {
-        if (i->position == msg.position) {
+        if ((i->position == msg.position && !lastValueQueue) // note that in some cases payload not be set
+            || (lastValueQueue && i->position == msg.position && i->payload.get() == msg.payload.get())) {
             if (lastValueQueue){
                 const framing::FieldTable* ft = msg.payload->getApplicationHeaders();
                 string key = ft->getString(qpidVQMatchProperty);

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp?rev=703704&r1=703703&r2=703704&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp Sat Oct 11 11:24:50 2008
@@ -423,9 +423,12 @@
     
     BOOST_CHECK_EQUAL(queue->getMessageCount(), 3u);
 
-    framing::SequenceNumber sequence;
-    QueuedMessage qmsg(queue.get(), msg2, ++sequence);
-    queue->acquire(qmsg);
+    framing::SequenceNumber sequence(1);
+    QueuedMessage qmsg(queue.get(), msg1, sequence);
+    QueuedMessage qmsg2(queue.get(), msg2, ++sequence);
+
+    BOOST_CHECK(!queue->acquire(qmsg));
+    BOOST_CHECK(queue->acquire(qmsg2));
     
     BOOST_CHECK_EQUAL(queue->getMessageCount(), 2u);