Author: aconway Date: Mon Mar 30 18:22:09 2009 New Revision: 760087 URL: http://svn.apache.org/viewvc?rev=760087&view=rev Log: Fix lifecycle issue in ExpiryPolicy - remove deleted messages from unexpired map.
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/ExpiryPolicy.cpp qpid/trunk/qpid/cpp/src/qpid/broker/ExpiryPolicy.h qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp qpid/trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.cpp qpid/trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.h Modified: qpid/trunk/qpid/cpp/src/qpid/broker/ExpiryPolicy.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/ExpiryPolicy.cpp?rev=760087&r1=760086&r2=760087&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/broker/ExpiryPolicy.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/broker/ExpiryPolicy.cpp Mon Mar 30 18:22:09 2009 @@ -33,4 +33,6 @@ return m.getExpiration() < sys::AbsTime::now(); } +void ExpiryPolicy::forget(Message&) {} + }} // namespace qpid::broker Modified: qpid/trunk/qpid/cpp/src/qpid/broker/ExpiryPolicy.h URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/ExpiryPolicy.h?rev=760087&r1=760086&r2=760087&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/broker/ExpiryPolicy.h (original) +++ qpid/trunk/qpid/cpp/src/qpid/broker/ExpiryPolicy.h Mon Mar 30 18:22:09 2009 @@ -39,6 +39,7 @@ 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 Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp?rev=760087&r1=760086&r2=760087&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp Mon Mar 30 18:22:09 2009 @@ -53,6 +53,8 @@ Message::~Message() { + if (expiryPolicy) + expiryPolicy->forget(*this); } void Message::forcePersistent() @@ -334,7 +336,7 @@ void Message::setExpiryPolicy(const boost::intrusive_ptr<ExpiryPolicy>& e) { expiryPolicy = e; - if (expiryPolicy) + if (expiryPolicy) expiryPolicy->willExpire(*this); } Modified: qpid/trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.cpp URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.cpp?rev=760087&r1=760086&r2=760087&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.cpp (original) +++ qpid/trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.cpp Mon Mar 30 18:22:09 2009 @@ -50,6 +50,13 @@ 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(); } Modified: qpid/trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.h URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.h?rev=760087&r1=760086&r2=760087&view=diff ============================================================================== --- qpid/trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.h (original) +++ qpid/trunk/qpid/cpp/src/qpid/cluster/ExpiryPolicy.h Mon Mar 30 18:22:09 2009 @@ -49,8 +49,8 @@ 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); --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:commits-subscr...@qpid.apache.org