You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2008/11/19 18:12:49 UTC
svn commit: r719012 - in /incubator/qpid/trunk/qpid/cpp/src/qpid/broker:
IncompleteMessageList.cpp IncompleteMessageList.h Message.cpp Message.h
Queue.cpp
Author: gsim
Date: Wed Nov 19 09:12:48 2008
New Revision: 719012
URL: http://svn.apache.org/viewvc?rev=719012&view=rev
Log:
Ensure that callbacks are removed before IncompleteMessageList instance is deleted.
(also removed commented out line of code from Queue.cpp)
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.h
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.h
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.cpp?rev=719012&r1=719011&r2=719012&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.cpp Wed Nov 19 09:12:48 2008
@@ -28,6 +28,12 @@
callback(boost::bind(&IncompleteMessageList::enqueueComplete, this, _1))
{}
+IncompleteMessageList::~IncompleteMessageList()
+{
+ sys::Mutex::ScopedLock l(lock);
+ std::for_each(incomplete.begin(), incomplete.end(), boost::bind(&Message::resetEnqueueCompleteCallback, _1));
+}
+
void IncompleteMessageList::add(boost::intrusive_ptr<Message> msg)
{
sys::Mutex::ScopedLock l(lock);
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.h?rev=719012&r1=719011&r2=719012&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/IncompleteMessageList.h Wed Nov 19 09:12:48 2008
@@ -44,6 +44,7 @@
typedef Message::MessageCallback CompletionListener;
IncompleteMessageList();
+ ~IncompleteMessageList();
void add(boost::intrusive_ptr<Message> msg);
void process(const CompletionListener& l, bool sync);
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp?rev=719012&r1=719011&r2=719012&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.cpp Wed Nov 19 09:12:48 2008
@@ -361,7 +361,9 @@
}
void Message::setEnqueueCompleteCallback(MessageCallback& cb) { enqueueCallback = &cb; }
+void Message::resetEnqueueCompleteCallback() { enqueueCallback = 0; }
void Message::setDequeueCompleteCallback(MessageCallback& cb) { dequeueCallback = &cb; }
+void Message::resetDequeueCompleteCallback() { dequeueCallback = 0; }
}} // namespace qpid::broker
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.h?rev=719012&r1=719011&r2=719012&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Message.h Wed Nov 19 09:12:48 2008
@@ -146,9 +146,11 @@
/** Call cb when enqueue is complete, may call immediately. Holds cb by reference. */
void setEnqueueCompleteCallback(MessageCallback& cb);
+ void resetEnqueueCompleteCallback();
/** Call cb when dequeue is complete, may call immediately. Holds cb by reference. */
void setDequeueCompleteCallback(MessageCallback& cb);
+ void resetDequeueCompleteCallback();
private:
typedef std::map<const Queue*,boost::intrusive_ptr<Message> > Replacement;
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp?rev=719012&r1=719011&r2=719012&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Queue.cpp Wed Nov 19 09:12:48 2008
@@ -496,7 +496,6 @@
QueuedMessage qm(this, msg, ++sequence);
if (policy.get()) policy->tryEnqueue(qm);
- //if (lastValueQueue && LVQinsert(qm) ) return; // LVQ update of existing message
LVQ::iterator i;
if (lastValueQueue){
const framing::FieldTable* ft = msg->getApplicationHeaders();