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 2009/03/04 21:37:54 UTC

svn commit: r750146 - in /activemq/activemq-cpp/trunk/src/main/activemq/transport/failover: BackupTransport.cpp BackupTransport.h FailoverTransport.cpp FailoverTransport.h FailoverTransportFactory.cpp ReconnectTask.cpp

Author: tabish
Date: Wed Mar  4 20:37:53 2009
New Revision: 750146

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

Fix a bunch of errors in the code that result in segfaults.

Modified:
    activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/BackupTransport.cpp
    activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/BackupTransport.h
    activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.cpp
    activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.h
    activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransportFactory.cpp
    activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.cpp

Modified: activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/BackupTransport.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/BackupTransport.cpp?rev=750146&r1=750145&r2=750146&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/BackupTransport.cpp (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/BackupTransport.cpp Wed Mar  4 20:37:53 2009
@@ -34,8 +34,7 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void BackupTransport::onTransportException( transport::Transport* source,
-                                            const decaf::lang::Exception& ex ) {
+void BackupTransport::onException( const decaf::lang::Exception& ex AMQCPP_UNUSED ) {
 
     this->closed = true;
 

Modified: activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/BackupTransport.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/BackupTransport.h?rev=750146&r1=750145&r2=750146&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/BackupTransport.h (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/BackupTransport.h Wed Mar  4 20:37:53 2009
@@ -98,8 +98,7 @@
          * @param source The source of the exception
          * @param ex The exception.
          */
-        virtual void onTransportException( transport::Transport* source,
-                                           const decaf::lang::Exception& ex );
+        virtual void onException( const decaf::lang::Exception& ex );
 
         /**
          * Has the Transport been shutdown and no longer usable.

Modified: activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.cpp?rev=750146&r1=750145&r2=750146&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.cpp (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.cpp Wed Mar  4 20:37:53 2009
@@ -40,8 +40,9 @@
 using namespace decaf::lang::exceptions;
 
 ////////////////////////////////////////////////////////////////////////////////
-FailoverTransport::FailoverTransport() {
+FailoverTransport::FailoverTransport( const Pointer<wireformat::WireFormat>& wireFormat ) {
 
+    this->wireFormat = wireFormat;
     this->timeout = -1;
     this->initialReconnectDelay = 10;
     this->maxReconnectDelay = 1000 * 30;
@@ -58,6 +59,7 @@
     this->trackMessages = false;
     this->maxCacheSize = 128 * 1024;
 
+    this->stateTracker.setTrackTransactions( true );
     this->myTransportListener.reset( new FailoverTransportListener( this ) );
     this->reconnectTask.reset( new ReconnectTask( this ) );
 }
@@ -134,6 +136,23 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+void FailoverTransport::reconnect( const decaf::net::URI& uri )
+    throw( decaf::io::IOException ) {
+
+    try {
+
+        if( !uris.contains( uri ) ) {
+            uris.add( uri );
+        }
+
+        reconnect();
+    }
+    AMQ_CATCH_RETHROW( IOException )
+    AMQ_CATCH_EXCEPTION_CONVERT( Exception, IOException )
+    AMQ_CATCHALL_THROW( IOException )
+}
+
+////////////////////////////////////////////////////////////////////////////////
 StlList<URI> FailoverTransport::getConnectList() const {
 
     StlList<URI> result( uris );
@@ -424,7 +443,7 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void FailoverTransport::handleTransportFailure( const decaf::lang::Exception& error )
+void FailoverTransport::handleTransportFailure( const decaf::lang::Exception& error AMQCPP_UNUSED )
     throw( decaf::lang::Exception ) {
 
     Pointer<Transport> transport;

Modified: activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.h?rev=750146&r1=750145&r2=750146&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.h (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.h Wed Mar  4 20:37:53 2009
@@ -26,6 +26,7 @@
 #include <activemq/transport/failover/BackupTransport.h>
 #include <activemq/transport/failover/ReconnectTask.h>
 #include <activemq/transport/failover/FailoverTransportListener.h>
+#include <activemq/wireformat/WireFormat.h>
 
 #include <decaf/util/StlList.h>
 #include <decaf/util/StlMap.h>
@@ -82,6 +83,7 @@
         decaf::util::concurrent::Mutex listenerMutex;
         decaf::util::StlMap<int, Pointer<Command> > requestMap;
 
+        Pointer<wireformat::WireFormat> wireFormat;
         Pointer<URI> connectedTransportURI;
         Pointer<URI> failedConnectTransportURI;
         Pointer<Transport> connectedTransport;
@@ -93,7 +95,7 @@
 
     public:
 
-        FailoverTransport();
+        FailoverTransport( const Pointer<wireformat::WireFormat>& wireFormat );
 
         virtual ~FailoverTransport();
 
@@ -197,7 +199,9 @@
          * Sets the WireFormat instance to use.
          * @param WireFormat the object used to encode / decode commands.
          */
-        virtual void setWireFormat( const Pointer<wireformat::WireFormat>& wireFormat ) {}
+        virtual void setWireFormat( const Pointer<wireformat::WireFormat>& wireFormat ) {
+            this->wireFormat = wireFormat;
+        }
 
         /**
          * Sets the observer of asynchronous events from this transport.
@@ -261,7 +265,7 @@
          * @throws IOException on failure of if not supported
          */
         virtual void reconnect( const decaf::net::URI& uri )
-            throw( decaf::io::IOException ) {}
+            throw( decaf::io::IOException );
 
     public: // FailoverTransport Property Getters / Setters
 

Modified: activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransportFactory.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransportFactory.cpp?rev=750146&r1=750145&r2=750146&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransportFactory.cpp (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransportFactory.cpp Wed Mar  4 20:37:53 2009
@@ -45,7 +45,7 @@
     try {
 
         CompositeData data = URISupport::parseComposite( location );
-        Pointer<FailoverTransport> transport( new FailoverTransport() );
+        Pointer<FailoverTransport> transport( new FailoverTransport( wireFormat ) );
 
         transport->setInitialReconnectDelay(
             Long::parseLong( properties.getProperty( "initialReconnectDelay", "10" ) ) );

Modified: activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.cpp?rev=750146&r1=750145&r2=750146&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.cpp (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.cpp Wed Mar  4 20:37:53 2009
@@ -41,7 +41,7 @@
     this->pending = false;
     this->shutDown = false;
 
-    this->start();
+    //this->start();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -85,7 +85,6 @@
 
     bool result = false;
     bool buildBackup = true;
-    bool doReconnect = !parent->closed;
 
     synchronized( &( parent->backupMutex ) ) {
         if( parent->connectedTransport == NULL && !parent->closed ) {