summaryrefslogtreecommitdiff
path: root/java/common
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2012-02-06 14:41:53 +0000
committerKeith Wall <kwall@apache.org>2012-02-06 14:41:53 +0000
commit17b2989c5bc49f9706ff653deeb67d0f01dfa4fc (patch)
tree47ff291978a82b491b5f1cc4c90ac1e6558ce0e9 /java/common
parent49f736770c392847456b30962bb7fa07d5f963bc (diff)
downloadqpid-python-17b2989c5bc49f9706ff653deeb67d0f01dfa4fc.tar.gz
QPID-3756: Reorder Java Broker's connection close process so that ConnectionCloseOk is sent only after first updating its internal state.
This change means that the connection mbean will be deregistered from JMX before sending ConnectionCloseOk, thus removing the possibility of the race condition. The client side process is unaffected by this change. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1241024 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/common')
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Connection.java2
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java9
2 files changed, 8 insertions, 3 deletions
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Connection.java b/java/common/src/main/java/org/apache/qpid/transport/Connection.java
index fbf53996a8..b0f1a1bad8 100644
--- a/java/common/src/main/java/org/apache/qpid/transport/Connection.java
+++ b/java/common/src/main/java/org/apache/qpid/transport/Connection.java
@@ -512,7 +512,7 @@ public class Connection extends ConnectionInvoker
exception(new ConnectionException(t));
}
- void closeCode(ConnectionClose close)
+ public void closeCode(ConnectionClose close)
{
synchronized (lock)
{
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java b/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
index c70cab85c9..fdd35d49ef 100644
--- a/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
+++ b/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
@@ -71,12 +71,17 @@ public abstract class ConnectionDelegate
@Override public void connectionClose(Connection conn, ConnectionClose close)
{
- conn.connectionCloseOk();
- conn.getSender().close();
+ sendConnectionCloseOkAndCloseSender(conn);
conn.closeCode(close);
conn.setState(CLOSE_RCVD);
}
+ protected void sendConnectionCloseOkAndCloseSender(Connection conn)
+ {
+ conn.connectionCloseOk();
+ conn.getSender().close();
+ }
+
@Override public void connectionCloseOk(Connection conn, ConnectionCloseOk ok)
{
conn.getSender().close();