You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2013/11/19 12:41:30 UTC

git commit: https://issues.apache.org/jira/browse/AMQ-4897 - race condition in failover transport

Updated Branches:
  refs/heads/trunk bc4f4e92a -> bc1ca6c8c


https://issues.apache.org/jira/browse/AMQ-4897 - race condition in failover transport


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/bc1ca6c8
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/bc1ca6c8
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/bc1ca6c8

Branch: refs/heads/trunk
Commit: bc1ca6c8cf3cfb36f552c6315f1a2ec359e3bb6b
Parents: bc4f4e9
Author: Dejan Bosanac <de...@nighttale.net>
Authored: Tue Nov 19 12:41:10 2013 +0100
Committer: Dejan Bosanac <de...@nighttale.net>
Committed: Tue Nov 19 12:41:10 2013 +0100

----------------------------------------------------------------------
 .../transport/failover/FailoverTransport.java   | 25 +++++++++-----------
 1 file changed, 11 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/bc1ca6c8/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java b/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
index 541eaeb..955a190 100755
--- a/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
+++ b/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
@@ -241,27 +241,24 @@ public class FailoverTransport implements CompositeTransport {
     }
 
     public final void handleTransportFailure(IOException e) throws InterruptedException {
-        if (LOG.isTraceEnabled()) {
-            LOG.trace(this + " handleTransportFailure: " + e);
-        }
-        Transport transport = connectedTransport.getAndSet(null);
-        if (transport == null) {
-            // sync with possible in progress reconnect
-            synchronized (reconnectMutex) {
-                transport = connectedTransport.getAndSet(null);
+        synchronized (reconnectMutex) {
+            if (LOG.isTraceEnabled()) {
+                LOG.trace(this + " handleTransportFailure: " + e);
             }
-        }
-        if (transport != null) {
 
-            disposeTransport(transport);
+            Transport transport = connectedTransport.getAndSet(null);
+
+            if (transport != null) {
+
+                disposeTransport(transport);
+
+                boolean reconnectOk = false;
 
-            boolean reconnectOk = false;
-            synchronized (reconnectMutex) {
                 if (canReconnect()) {
                     reconnectOk = true;
                 }
                 LOG.warn("Transport (" + transport.getRemoteAddress() + ") failed, reason:  " + e
-                        + (reconnectOk ? "," : ", not")  +" attempting to automatically reconnect");
+                        + (reconnectOk ? "," : ", not") + " attempting to automatically reconnect");
 
                 initialized = false;
                 failedConnectTransportURI = connectedTransportURI;