summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Message.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-12-14 16:25:47 +0000
committerGordon Sim <gsim@apache.org>2007-12-14 16:25:47 +0000
commitbb1b322d0e69384789e6a21c5d8da49311a1a628 (patch)
tree1d80f8d128e87731309ca69e7bab463c3e61ad5e /cpp/src/qpid/broker/Message.cpp
parent968971e63c9c21f24e2a7003addfbd574ada12f0 (diff)
downloadqpid-python-bb1b322d0e69384789e6a21c5d8da49311a1a628.tar.gz
Some fixes for 'flow to disk' (i.e. dropping message content from memory, and loading it from disk for delivery)
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@604215 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Message.cpp')
-rw-r--r--cpp/src/qpid/broker/Message.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/Message.cpp b/cpp/src/qpid/broker/Message.cpp
index e01a553207..1730c01099 100644
--- a/cpp/src/qpid/broker/Message.cpp
+++ b/cpp/src/qpid/broker/Message.cpp
@@ -28,6 +28,7 @@
#include "qpid/framing/SendContent.h"
#include "qpid/framing/SequenceNumber.h"
#include "qpid/framing/TypeFilter.h"
+#include "qpid/log/Statement.h"
using namespace qpid::broker;
using namespace qpid::framing;
@@ -35,7 +36,18 @@ using std::string;
TransferAdapter Message::TRANSFER;
-Message::Message(const SequenceNumber& id) : frames(id), persistenceId(0), redelivered(false), loaded(false), publisher(0), adapter(0) {}
+Message::Message(const SequenceNumber& id) : frames(id), persistenceId(0), redelivered(false), loaded(false), staged(false), publisher(0), adapter(0) {}
+
+Message::~Message()
+{
+ if (staged) {
+ if (store) {
+ store->destroy(*this);
+ } else {
+ QPID_LOG(error, "Message content was staged but no store is set so it can't be destroyed");
+ }
+ }
+}
std::string Message::getRoutingKey() const
{
@@ -152,6 +164,7 @@ void Message::releaseContent(MessageStore* _store)
if (!getPersistenceId()) {
intrusive_ptr<PersistableMessage> pmsg(this);
store->stage(pmsg);
+ staged = true;
}
//remove any content frames from the frameset
frames.remove(TypeFilter<CONTENT_BODY>());