From f4f8eff9cd23ee5a02cbc63a6ca532e6b9eea0d9 Mon Sep 17 00:00:00 2001 From: "Rafael H. Schloming" Date: Tue, 25 Sep 2007 02:36:48 +0000 Subject: improved close handling, made session.sync() return on session close git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@579040 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/qpidity/transport/Channel.java | 4 ++++ .../java/org/apache/qpidity/transport/Connection.java | 10 ++++++++++ .../java/org/apache/qpidity/transport/Session.java | 18 +++++++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) (limited to 'java/common/src') diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Channel.java b/java/common/src/main/java/org/apache/qpidity/transport/Channel.java index a74ff99eb9..f05ec82d65 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Channel.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Channel.java @@ -112,6 +112,10 @@ public class Channel extends Invoker public void closed() { System.out.println("channel closed: " + this); + if (session != null) + { + session.closed(); + } } public void close() diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Connection.java b/java/common/src/main/java/org/apache/qpidity/transport/Connection.java index 2c68b7c38b..d29917afd5 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Connection.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Connection.java @@ -21,6 +21,7 @@ package org.apache.qpidity.transport; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.nio.ByteBuffer; @@ -94,6 +95,15 @@ public class Connection public void closed() { System.out.println("connection closed: " + this); + synchronized (channels) + { + for (Iterator it = channels.values().iterator(); + it.hasNext(); ) + { + it.next().closed(); + it.remove(); + } + } } public void close() diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Session.java b/java/common/src/main/java/org/apache/qpidity/transport/Session.java index 59e8daae31..3305d04489 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Session.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Session.java @@ -52,6 +52,8 @@ public class Session extends Invoker private Map commands = new HashMap(); private long mark = 0; + private boolean closed = false; + public Map getOutstandingCommands() { @@ -232,7 +234,7 @@ public class Session extends Invoker executionSync(); } - while (!commands.isEmpty()) + while (!closed && !commands.isEmpty()) { try { System.out.println("\n============sync() waiting for commmands to be completed ==============\n"); @@ -244,6 +246,11 @@ public class Session extends Invoker throw new RuntimeException(e); } } + + if (!commands.isEmpty()) + { + throw new RuntimeException("session closed"); + } } } @@ -334,4 +341,13 @@ public class Session extends Invoker channel.close(); } + public void closed() + { + synchronized (commands) + { + closed = true; + commands.notifyAll(); + } + } + } -- cgit v1.2.1