diff options
Diffstat (limited to 'qpid/java')
| -rw-r--r-- | qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java b/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java index 0bd203a8dd..5b45387be3 100644 --- a/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java +++ b/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java @@ -25,6 +25,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.TimeUnit; import org.apache.qpid.client.url.URLParser_0_10; import org.apache.qpid.jms.BrokerDetails; @@ -255,15 +256,24 @@ public class Client implements org.apache.qpidity.nclient.Connection _lock.lock(); try { - try { - while (!closed) + try + { + long timeout = 60000; + long start = System.currentTimeMillis(); + long elapsed = 0; + while (!closed && elapsed < timeout) + { + closeOk.await(timeout - elapsed, TimeUnit.MILLISECONDS); + elapsed = System.currentTimeMillis() - start; + } + if(! closed ) { - closeOk.await(); + throw new QpidException("Timed out when closing connection", ErrorCode.CONNECTION_ERROR, null); } } catch (InterruptedException e) { - // do nothing + throw new QpidException("Interrupted when closing connection", ErrorCode.CONNECTION_ERROR, null); } } finally |
