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:[email protected]