You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2010/09/20 23:04:17 UTC

svn commit: r999121 - /activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp

Author: tabish
Date: Mon Sep 20 21:04:17 2010
New Revision: 999121

URL: http://svn.apache.org/viewvc?rev=999121&view=rev
Log:
https://issues.apache.org/activemq/browse/AMQCPP-316

Fix a case where the connection's config object could be leaked on a shutdown where the failover transport has its timeout option set and am exception is thrown to the connection when its RemoveInfo command or ShutdownInfo command is sent.

Also unset the exception listener eariler than it was before since we don't care about async errors once we enter the disconnect method.

Modified:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp?rev=999121&r1=999120&r2=999121&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp Mon Sep 20 21:04:17 2010
@@ -181,7 +181,12 @@ ActiveMQConnection::ActiveMQConnection( 
 ////////////////////////////////////////////////////////////////////////////////
 ActiveMQConnection::~ActiveMQConnection() throw() {
     try {
-        this->close();
+
+        try{
+            this->close();
+        } catch(...) {}
+
+        // This must happen even if exceptions occur in the Close attempt.
         delete this->config;
     }
     AMQ_CATCH_NOTHROW( ActiveMQException )
@@ -436,6 +441,9 @@ void ActiveMQConnection::disconnect( lon
 
     try{
 
+        // Clear the listener, we don't care about async errors at this point.
+        this->config->transport->setTransportListener( NULL );
+
         // Remove our ConnectionId from the Broker
         Pointer<RemoveInfo> command( this->config->connectionInfo->createRemoveCommand() );
         command->setLastDeliveredSequenceId( lastDeliveredSequenceId );
@@ -451,9 +459,6 @@ void ActiveMQConnection::disconnect( lon
 
         if( this->config->transport != NULL ){
 
-            // Clear the listener, we don't care about errors at this point.
-            this->config->transport->setTransportListener( NULL );
-
             try{
                 this->config->transport->close();
             }catch( exceptions::ActiveMQException& ex ){