summaryrefslogtreecommitdiff
path: root/java/common/src/main/java/org/apache/qpid/transport/Session.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/common/src/main/java/org/apache/qpid/transport/Session.java')
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Session.java24
1 files changed, 24 insertions, 0 deletions
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Session.java b/java/common/src/main/java/org/apache/qpid/transport/Session.java
index 5b458aa858..10ca6cfb0a 100644
--- a/java/common/src/main/java/org/apache/qpid/transport/Session.java
+++ b/java/common/src/main/java/org/apache/qpid/transport/Session.java
@@ -268,6 +268,23 @@ public class Session extends Invoker
public void invoke(Method m)
{
+ if (closed.get())
+ {
+ List<ExecutionException> exc = getExceptions();
+ if (!exc.isEmpty())
+ {
+ throw new SessionException(exc);
+ }
+ else if (close != null)
+ {
+ throw new ConnectionException(close);
+ }
+ else
+ {
+ throw new SessionClosedException();
+ }
+ }
+
if (m.getEncodedTrack() == Frame.L4)
{
synchronized (commands)
@@ -379,6 +396,13 @@ public class Session extends Invoker
}
}
+ private ConnectionClose close = null;
+
+ void closeCode(ConnectionClose close)
+ {
+ this.close = close;
+ }
+
List<ExecutionException> getExceptions()
{
synchronized (exceptions)