From b83ae1220778cbc58919430ff2f2ded0a27b1ac9 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Mon, 25 Jan 2010 20:49:36 +0000 Subject: QPID-2320: merged fix from trunk to 0.6 release branch. git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.6-release@902969 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/broker/Queue.cpp | 11 +++++------ qpid/cpp/src/tests/QueueTest.cpp | 5 +++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/qpid/cpp/src/qpid/broker/Queue.cpp b/qpid/cpp/src/qpid/broker/Queue.cpp index f4231f2397..068ebe3103 100644 --- a/qpid/cpp/src/qpid/broker/Queue.cpp +++ b/qpid/cpp/src/qpid/broker/Queue.cpp @@ -263,9 +263,10 @@ bool Queue::acquire(const QueuedMessage& msg) { 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 @@ bool Queue::acquire(const QueuedMessage& msg) { 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; diff --git a/qpid/cpp/src/tests/QueueTest.cpp b/qpid/cpp/src/tests/QueueTest.cpp index 6c2adf5c87..80c69ac386 100644 --- a/qpid/cpp/src/tests/QueueTest.cpp +++ b/qpid/cpp/src/tests/QueueTest.cpp @@ -544,9 +544,14 @@ QPID_AUTO_TEST_CASE(testLVQAcquire){ 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); -- cgit v1.2.1