Author: gsim
Date: Thu Nov  6 05:30:27 2008
New Revision: 711855

URL: http://svn.apache.org/viewvc?rev=711855&view=rev
Log:
QPID-1417: ensure there are no dangling pointers in a connections output tasks


Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Connection.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AggregateOutput.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AggregateOutput.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Connection.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Connection.cpp?rev=711855&r1=711854&r2=711855&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Connection.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Connection.cpp Thu Nov  6 
05:30:27 2008
@@ -169,6 +169,8 @@
 {
     QPID_LOG_IF(error, code != 200, "Connection " << mgmtId << " closed by 
error: " << text << "(" << code << ")");
     adapter.close(code, text, classId, methodId);
+    //make sure we delete dangling pointers from outputTasks before deleting 
sessions
+    outputTasks.removeAll();
     channels.clear();
     getOutput().close();
 }

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AggregateOutput.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AggregateOutput.cpp?rev=711855&r1=711854&r2=711855&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AggregateOutput.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AggregateOutput.cpp Thu Nov  6 
05:30:27 2008
@@ -65,4 +65,9 @@
     if (i != tasks.end()) tasks.erase(i);
 }
 
+void AggregateOutput::removeAll()
+{
+    tasks.clear();
+}
+
 }} // namespace qpid::sys

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AggregateOutput.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AggregateOutput.h?rev=711855&r1=711854&r2=711855&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AggregateOutput.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/sys/AggregateOutput.h Thu Nov  6 
05:30:27 2008
@@ -48,6 +48,7 @@
         bool hasOutput();
         void addOutputTask(OutputTask* t);
         void removeOutputTask(OutputTask* t);
+        void removeAll();
 
         /** Apply f to each OutputTask* in the tasks list */
         template <class F> void eachOutput(F f) {


Reply via email to