summaryrefslogtreecommitdiff
path: root/qpid/java/client/src
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2008-06-05 17:53:32 +0000
committerRafael H. Schloming <rhs@apache.org>2008-06-05 17:53:32 +0000
commit01238260de081423705f65442687af75720acca6 (patch)
treee26b5eba7b56a5702b52f317ef367cb5656114ed /qpid/java/client/src
parent955e0ce317d210482226a6481acf460d7da7d913 (diff)
downloadqpid-python-01238260de081423705f65442687af75720acca6.tar.gz
QPID-1116: fixed a race condition in connection/session close, session close now waits for the session to be detached before returning, this guarantees we won't have any active sessions when the connection close is attempted
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@663677 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/client/src')
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java2
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java3
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpidity/nclient/Client.java3
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpidity/nclient/Session.java2
4 files changed, 6 insertions, 4 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
index bde60c433f..e741d4071c 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
@@ -152,7 +152,7 @@ public class AMQConnectionDelegate_0_10 implements AMQConnectionDelegate, Closed
{
if (_logger.isDebugEnabled())
{
- _logger.debug("Received a connection close from the broker: Error code : " + errorCode.getCode());
+ _logger.debug("Received a connection close from the broker: Error code : " + errorCode.getCode(), t);
}
if (_conn._exceptionListener != null)
{
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
index 17b7486fb7..e43072422c 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
@@ -210,8 +210,7 @@ public class AMQSession_0_10 extends AMQSession
public void sendClose(long timeout) throws AMQException, FailoverException
{
getQpidSession().sync();
- getQpidSession().sessionRequestTimeout(0);
- getQpidSession().sessionDetach(getQpidSession().getName());
+ getQpidSession().close();
getCurrentException();
}
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 5b45387be3..9fb4c541a9 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
@@ -21,6 +21,7 @@ package org.apache.qpidity.nclient;
import java.util.List;
import java.util.UUID;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
@@ -266,7 +267,7 @@ public class Client implements org.apache.qpidity.nclient.Connection
closeOk.await(timeout - elapsed, TimeUnit.MILLISECONDS);
elapsed = System.currentTimeMillis() - start;
}
- if(! closed )
+ if(!closed)
{
throw new QpidException("Timed out when closing connection", ErrorCode.CONNECTION_ERROR, null);
}
diff --git a/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Session.java b/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Session.java
index 833a26da87..c4d80e0fee 100644
--- a/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Session.java
+++ b/qpid/java/client/src/main/java/org/apache/qpidity/nclient/Session.java
@@ -63,6 +63,8 @@ public interface Session
*/
public void sync();
+ public void close();
+
public void sessionDetach(byte[] name);
public void sessionRequestTimeout(long expiry);