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

Reply via email to