From commits-return-8204-apmail-activemq-commits-archive=activemq.apache.org@activemq.apache.org Wed Mar 12 17:10:55 2008 Return-Path: Delivered-To: apmail-activemq-commits-archive@www.apache.org Received: (qmail 23254 invoked from network); 12 Mar 2008 17:10:54 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 12 Mar 2008 17:10:54 -0000 Received: (qmail 47386 invoked by uid 500); 12 Mar 2008 17:10:51 -0000 Delivered-To: apmail-activemq-commits-archive@activemq.apache.org Received: (qmail 47367 invoked by uid 500); 12 Mar 2008 17:10:51 -0000 Mailing-List: contact commits-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list commits@activemq.apache.org Received: (qmail 47358 invoked by uid 99); 12 Mar 2008 17:10:51 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 12 Mar 2008 10:10:51 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 12 Mar 2008 17:10:11 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 51D541A9832; Wed, 12 Mar 2008 10:10:30 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r636425 - /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java Date: Wed, 12 Mar 2008 17:10:30 -0000 To: commits@activemq.apache.org From: rajdavies@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080312171030.51D541A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: rajdavies Date: Wed Mar 12 10:10:17 2008 New Revision: 636425 URL: http://svn.apache.org/viewvc?rev=636425&view=rev Log: use a separate mutex for building backups Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java?rev=636425&r1=636424&r2=636425&view=diff ============================================================================== --- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java (original) +++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java Wed Mar 12 10:10:17 2008 @@ -68,6 +68,7 @@ private final CopyOnWriteArrayList uris = new CopyOnWriteArrayList(); private final Object reconnectMutex = new Object(); + private final Object backupMutex = new Object(); private final Object sleepMutex = new Object(); private final ConnectionStateTracker stateTracker = new ConnectionStateTracker(); private final ConcurrentHashMap requestMap = new ConcurrentHashMap(); @@ -633,26 +634,28 @@ if (!useExponentialBackOff) { reconnectDelay = initialReconnectDelay; } - if (backup && !backups.isEmpty()) { - BackupTransport bt = backups.remove(0); - Transport t = bt.getTransport(); - URI uri = bt.getUri(); - t.setTransportListener(myTransportListener); - try { - if (started) { - restoreTransport(t); - } - reconnectDelay = initialReconnectDelay; - failedConnectTransportURI=null; - connectedTransportURI = uri; - connectedTransport.set(t); - reconnectMutex.notifyAll(); - connectFailures = 0; - LOG.info("Successfully reconnected to backup " + uri); - return false; - }catch (Exception e) { - LOG.debug("Backup transport failed",e); - } + synchronized(backupMutex) { + if (backup && !backups.isEmpty()) { + BackupTransport bt = backups.remove(0); + Transport t = bt.getTransport(); + URI uri = bt.getUri(); + t.setTransportListener(myTransportListener); + try { + if (started) { + restoreTransport(t); + } + reconnectDelay = initialReconnectDelay; + failedConnectTransportURI=null; + connectedTransportURI = uri; + connectedTransport.set(t); + reconnectMutex.notifyAll(); + connectFailures = 0; + LOG.info("Successfully reconnected to backup " + uri); + return false; + }catch (Exception e) { + LOG.debug("Backup transport failed",e); + } + } } Iterator iter = connectList.iterator(); @@ -742,7 +745,7 @@ final boolean buildBackups() { - synchronized (reconnectMutex) { + synchronized (backupMutex) { if (!disposed && backup && backups.size() < backupPoolSize) { List connectList = getConnectList(); //removed disposed backups