diff options
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r-- | cpp/src/qpid/broker/ExpiryPolicy.cpp | 2 | ||||
-rw-r--r-- | cpp/src/qpid/broker/ExpiryPolicy.h | 1 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Message.cpp | 4 | ||||
-rw-r--r-- | cpp/src/qpid/cluster/ExpiryPolicy.cpp | 7 | ||||
-rw-r--r-- | cpp/src/qpid/cluster/ExpiryPolicy.h | 2 |
5 files changed, 14 insertions, 2 deletions
diff --git a/cpp/src/qpid/broker/ExpiryPolicy.cpp b/cpp/src/qpid/broker/ExpiryPolicy.cpp index 907f1e56e1..ffe0cc437b 100644 --- a/cpp/src/qpid/broker/ExpiryPolicy.cpp +++ b/cpp/src/qpid/broker/ExpiryPolicy.cpp @@ -33,4 +33,6 @@ bool ExpiryPolicy::hasExpired(Message& m) { return m.getExpiration() < sys::AbsTime::now(); } +void ExpiryPolicy::forget(Message&) {} + }} // namespace qpid::broker diff --git a/cpp/src/qpid/broker/ExpiryPolicy.h b/cpp/src/qpid/broker/ExpiryPolicy.h index cefe9b7552..eeb3ffda21 100644 --- a/cpp/src/qpid/broker/ExpiryPolicy.h +++ b/cpp/src/qpid/broker/ExpiryPolicy.h @@ -39,6 +39,7 @@ class ExpiryPolicy : public RefCounted QPID_BROKER_EXTERN virtual ~ExpiryPolicy(); QPID_BROKER_EXTERN virtual void willExpire(Message&); QPID_BROKER_EXTERN virtual bool hasExpired(Message&); + QPID_BROKER_EXTERN virtual void forget(Message&); }; }} // namespace qpid::broker diff --git a/cpp/src/qpid/broker/Message.cpp b/cpp/src/qpid/broker/Message.cpp index 40b5515829..1e9eb9d386 100644 --- a/cpp/src/qpid/broker/Message.cpp +++ b/cpp/src/qpid/broker/Message.cpp @@ -53,6 +53,8 @@ Message::Message(const framing::SequenceNumber& id) : Message::~Message() { + if (expiryPolicy) + expiryPolicy->forget(*this); } void Message::forcePersistent() @@ -334,7 +336,7 @@ void Message::setTimestamp(const boost::intrusive_ptr<ExpiryPolicy>& e) void Message::setExpiryPolicy(const boost::intrusive_ptr<ExpiryPolicy>& e) { expiryPolicy = e; - if (expiryPolicy) + if (expiryPolicy) expiryPolicy->willExpire(*this); } diff --git a/cpp/src/qpid/cluster/ExpiryPolicy.cpp b/cpp/src/qpid/cluster/ExpiryPolicy.cpp index 409180c499..348963f901 100644 --- a/cpp/src/qpid/cluster/ExpiryPolicy.cpp +++ b/cpp/src/qpid/cluster/ExpiryPolicy.cpp @@ -50,6 +50,13 @@ void ExpiryPolicy::willExpire(broker::Message& m) { timer.add(new ExpiryTask(this, id, m.getExpiration())); } +void ExpiryPolicy::forget(broker::Message& m) { + MessageIdMap::iterator i = unexpiredByMessage.find(&m); + assert(i != unexpiredByMessage.end()); + unexpiredById.erase(i->second); + unexpiredByMessage.erase(i); +} + bool ExpiryPolicy::hasExpired(broker::Message& m) { return unexpiredByMessage.find(&m) == unexpiredByMessage.end(); } diff --git a/cpp/src/qpid/cluster/ExpiryPolicy.h b/cpp/src/qpid/cluster/ExpiryPolicy.h index 9f8b1a9236..c147e54796 100644 --- a/cpp/src/qpid/cluster/ExpiryPolicy.h +++ b/cpp/src/qpid/cluster/ExpiryPolicy.h @@ -49,8 +49,8 @@ class ExpiryPolicy : public broker::ExpiryPolicy ExpiryPolicy(Multicaster&, const MemberId&, broker::Timer&); void willExpire(broker::Message&); - bool hasExpired(broker::Message&); + void forget(broker::Message&); // Send expiration notice to cluster. void sendExpire(uint64_t); |