From dce43316e7c701d34fd79bf8c8399646dbd37adf Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Thu, 30 Sep 2010 10:29:37 +0000 Subject: QPID-2857: Fix issue identified by running FindBugs across the codebase. Release lock before sleeping. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1002993 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/jms/failover/FailoverExchangeMethod.java | 41 ++++++++++++---------- 1 file changed, 22 insertions(+), 19 deletions(-) (limited to 'java') diff --git a/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverExchangeMethod.java b/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverExchangeMethod.java index 960661daea..9e6000c472 100644 --- a/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverExchangeMethod.java +++ b/java/client/src/main/java/org/apache/qpid/jms/failover/FailoverExchangeMethod.java @@ -196,6 +196,8 @@ public class FailoverExchangeMethod implements FailoverMethod, MessageListener public BrokerDetails getNextBrokerDetails() { + BrokerDetails broker = null; + synchronized(_brokerListLock) { if (_currentBrokerIndex == (_connectionDetails.getBrokerCount() - 1)) @@ -207,7 +209,7 @@ public class FailoverExchangeMethod implements FailoverMethod, MessageListener _currentBrokerIndex++; } - BrokerDetails broker = _connectionDetails.getBrokerDetails(_currentBrokerIndex); + broker = _connectionDetails.getBrokerDetails(_currentBrokerIndex); // When the broker list is updated it will include the current broker as well // There is no point trying it again, so trying the next one. @@ -225,30 +227,31 @@ public class FailoverExchangeMethod implements FailoverMethod, MessageListener return null; } } + } - String delayStr = broker.getProperty(BrokerDetails.OPTIONS_CONNECT_DELAY); - if (delayStr != null) + String delayStr = broker.getProperty(BrokerDetails.OPTIONS_CONNECT_DELAY); + if (delayStr != null) + { + Long delay = Long.parseLong(delayStr); + _logger.info("Delay between connect retries:" + delay); + try { - Long delay = Long.parseLong(delayStr); - _logger.info("Delay between connect retries:" + delay); - try - { - Thread.sleep(delay); - } - catch (InterruptedException ie) - { - return null; - } + Thread.sleep(delay); } - else + catch (InterruptedException ie) { - _logger.info("No delay between connect retries, use tcp://host:port?connectdelay='value' to enable."); + return null; } - - _failedAttemps ++; - _currentBrokerDetail = broker; - return broker; } + else + { + _logger.info("No delay between connect retries, use tcp://host:port?connectdelay='value' to enable."); + } + + _failedAttemps ++; + _currentBrokerDetail = broker; + + return broker; } public boolean failoverAllowed() -- cgit v1.2.1