summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2009-12-15 09:50:30 +0000
committerGordon Sim <gsim@apache.org>2009-12-15 09:50:30 +0000
commitf7c59a259c5c725a95478c2b756673c7702505b4 (patch)
tree8dd5bf8375af84ac4de65d7caa65e807af9eeda0
parente8ac34d6643375463dd59d7d614cddb59a01d5a6 (diff)
downloadqpid-python-f7c59a259c5c725a95478c2b756673c7702505b4.tar.gz
QPID-2089: Dequeue on acquire for accept mode NONE
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@890721 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/src/qpid/broker/DeliveryRecord.cpp6
-rw-r--r--qpid/cpp/src/qpid/broker/SemanticState.cpp2
2 files changed, 6 insertions, 2 deletions
diff --git a/qpid/cpp/src/qpid/broker/DeliveryRecord.cpp b/qpid/cpp/src/qpid/broker/DeliveryRecord.cpp
index 0cfa2391fd..22ec5e86a0 100644
--- a/qpid/cpp/src/qpid/broker/DeliveryRecord.cpp
+++ b/qpid/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/qpid/cpp/src/qpid/broker/SemanticState.cpp b/qpid/cpp/src/qpid/broker/SemanticState.cpp
index 9680ada936..4502ff9f32 100644
--- a/qpid/cpp/src/qpid/broker/SemanticState.cpp
+++ b/qpid/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);
}