Author: cctrieloff
Date: Wed Jan 6 21:48:42 2010
New Revision: 896687
URL: http://svn.apache.org/viewvc?rev=896687&view=rev
Log:
fix & test QPID-2320
Modified:
qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=896687&r1=896686&r2=896687&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Wed Jan 6 21:48:42 2010
@@ -263,9 +263,10 @@
Mutex::ScopedLock locker(messageLock);
QPID_LOG(debug, "attempting to acquire " << msg.position);
Messages::iterator i = findAt(msg.position);
- if ((i != messages.end() && !lastValueQueue) // note that in some cases
payload not be set
- || (lastValueQueue && (i->position == msg.position) &&
- msg.payload.get() == checkLvqReplace(*i).payload.get()) ) {
+ if ((i != messages.end() && i->position == msg.position) && // note that
in some cases payload not be set
+ (!lastValueQueue ||
+ (lastValueQueue && msg.payload.get() ==
checkLvqReplace(*i).payload.get()) ) // note this is safe for no payload set
0==0
+ ) {
clearLVQIndex(msg);
QPID_LOG(debug,
@@ -273,9 +274,7 @@
i->position << " == " << msg.position);
messages.erase(i);
return true;
- } else {
- QPID_LOG(debug, "No match: " << i->position << " != " << msg.position);
- }
+ }
QPID_LOG(debug, "Acquire failed for " << msg.position);
return false;
Modified: qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp?rev=896687&r1=896686&r2=896687&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp (original)
+++ qpid/trunk/qpid/cpp/src/tests/QueueTest.cpp Wed Jan 6 21:48:42 2010
@@ -544,9 +544,14 @@
framing::SequenceNumber sequence(1);
QueuedMessage qmsg(queue.get(), msg1, sequence);
QueuedMessage qmsg2(queue.get(), msg2, ++sequence);
+ framing::SequenceNumber sequence1(10);
+ QueuedMessage qmsg3(queue.get(), 0, sequence1);
BOOST_CHECK(!queue->acquire(qmsg));
BOOST_CHECK(queue->acquire(qmsg2));
+ // Acquire the massage again to test failure case.
+ BOOST_CHECK(!queue->acquire(qmsg2));
+ BOOST_CHECK(!queue->acquire(qmsg3));
BOOST_CHECK_EQUAL(queue->getMessageCount(), 2u);
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]