summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/broker/Queue.cpp3
-rw-r--r--cpp/src/tests/QueueTest.cpp9
2 files changed, 8 insertions, 4 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp
index 4382ac2e57..315da23965 100644
--- a/cpp/src/qpid/broker/Queue.cpp
+++ b/cpp/src/qpid/broker/Queue.cpp
@@ -202,7 +202,8 @@ bool Queue::acquire(const QueuedMessage& msg) {
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);
diff --git a/cpp/src/tests/QueueTest.cpp b/cpp/src/tests/QueueTest.cpp
index a189dc1f15..ccc2fc2391 100644
--- a/cpp/src/tests/QueueTest.cpp
+++ b/cpp/src/tests/QueueTest.cpp
@@ -423,9 +423,12 @@ QPID_AUTO_TEST_CASE(testLVQAcquire){
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);