From 17450dde553efb74e549493391288af5ee2b6e3b Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Tue, 15 Dec 2009 09:50:30 +0000 Subject: QPID-2089: Dequeue on acquire for accept mode NONE git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@890721 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/DeliveryRecord.cpp | 6 +++++- cpp/src/qpid/broker/SemanticState.cpp | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'cpp/src/qpid') diff --git a/cpp/src/qpid/broker/DeliveryRecord.cpp b/cpp/src/qpid/broker/DeliveryRecord.cpp index 0cfa2391fd..22ec5e86a0 100644 --- a/cpp/src/qpid/broker/DeliveryRecord.cpp +++ b/cpp/src/qpid/broker/DeliveryRecord.cpp @@ -43,7 +43,7 @@ DeliveryRecord::DeliveryRecord(const QueuedMessage& _msg, acceptExpected(!accepted), cancelled(false), completed(false), - ended(accepted), + ended(accepted && acquired), windowing(_windowing), credit(msg.payload ? msg.payload->getRequiredCredit() : _credit) {} @@ -150,6 +150,10 @@ void DeliveryRecord::acquire(DeliveryIds& results) { if (queue->acquire(msg)) { acquired = true; results.push_back(id); + if (!acceptExpected) { + if (ended) { QPID_LOG(error, "Can't dequeue ended message"); } + else { queue->dequeue(0, msg); setEnded(); } + } } else { QPID_LOG(info, "Message already acquired " << id.getValue()); } diff --git a/cpp/src/qpid/broker/SemanticState.cpp b/cpp/src/qpid/broker/SemanticState.cpp index 9680ada936..4502ff9f32 100644 --- a/cpp/src/qpid/broker/SemanticState.cpp +++ b/cpp/src/qpid/broker/SemanticState.cpp @@ -311,7 +311,7 @@ bool SemanticState::ConsumerImpl::deliver(QueuedMessage& msg) bool sync = syncFrequency && ++deliveryCount >= syncFrequency; if (sync) deliveryCount = 0;//reset parent->deliver(record, sync); - if (!ackExpected) record.setEnded();//allows message to be released now its been delivered + if (!ackExpected && acquire) record.setEnded();//allows message to be released now its been delivered if (windowing || ackExpected || !acquire) { parent->record(record); } -- cgit v1.2.1