diff options
| author | Gordon Sim <gsim@apache.org> | 2007-12-14 16:25:47 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2007-12-14 16:25:47 +0000 |
| commit | bb1b322d0e69384789e6a21c5d8da49311a1a628 (patch) | |
| tree | 1d80f8d128e87731309ca69e7bab463c3e61ad5e /cpp/src/qpid/broker/Message.cpp | |
| parent | 968971e63c9c21f24e2a7003addfbd574ada12f0 (diff) | |
| download | qpid-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.cpp | 15 |
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>()); |
