From 6b67c025160e2363052820b9f686bbf386d9c96a Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Thu, 27 Nov 2008 12:21:04 +0000 Subject: * QPID-1488: test that policy pointer is set * don't flow to disk for null store implementation * add checks for undeflow in queue policy git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@721166 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/Queue.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'cpp/src/qpid/broker/Queue.cpp') diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp index b1f9163bb5..a78744598c 100644 --- a/cpp/src/qpid/broker/Queue.cpp +++ b/cpp/src/qpid/broker/Queue.cpp @@ -24,6 +24,7 @@ #include "Exchange.h" #include "DeliverableMessage.h" #include "MessageStore.h" +#include "NullMessageStore.h" #include "QueueRegistry.h" #include "qpid/StringUtils.h" @@ -741,12 +742,15 @@ void Queue::encode(Buffer& buffer) const { buffer.putShortString(name); buffer.put(settings); - buffer.put(*policy); + if (policy.get()) { + buffer.put(*policy); + } } uint32_t Queue::encodedSize() const { - return name.size() + 1/*short string size octet*/ + settings.encodedSize() + (*policy).encodedSize(); + return name.size() + 1/*short string size octet*/ + settings.encodedSize() + + (policy.get() ? (*policy).encodedSize() : 0); } Queue::shared_ptr Queue::decode(QueueRegistry& queues, Buffer& buffer) @@ -756,7 +760,9 @@ Queue::shared_ptr Queue::decode(QueueRegistry& queues, Buffer& buffer) std::pair result = queues.declare(name, true); buffer.get(result.first->settings); result.first->configure(result.first->settings); - buffer.get ( *(result.first->policy) ); + if (result.first->policy.get()) { + buffer.get ( *(result.first->policy) ); + } return result.first; } @@ -828,7 +834,7 @@ void Queue::setExternalQueueStore(ExternalQueueStore* inst) { bool Queue::releaseMessageContent(const QueuedMessage& m) { - if (store) { + if (store && !NullMessageStore::isNullStore(store)) { QPID_LOG(debug, "Message " << m.position << " on " << name << " released from memory"); m.payload->releaseContent(store); return true; -- cgit v1.2.1