summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2010-01-25 20:49:36 +0000
committerGordon Sim <gsim@apache.org>2010-01-25 20:49:36 +0000
commitb83ae1220778cbc58919430ff2f2ded0a27b1ac9 (patch)
tree0f76f7a70f825c5e6231c649623bd5be26287c21
parent79a525703d1183533c5ffdae322dd24acf8e9358 (diff)
downloadqpid-python-b83ae1220778cbc58919430ff2f2ded0a27b1ac9.tar.gz
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
-rw-r--r--qpid/cpp/src/qpid/broker/Queue.cpp11
-rw-r--r--qpid/cpp/src/tests/QueueTest.cpp5
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);