summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2013-10-24 12:50:48 +0000
committerRobert Godfrey <rgodfrey@apache.org>2013-10-24 12:50:48 +0000
commit1ca43e387564d7b43f04c20b4372eaa470de910c (patch)
tree313f09a2787cc9164edc134a8f633880ac9e95e0 /qpid/java
parent779a9279e52481bfa63acea6bf3fe7116257e83a (diff)
downloadqpid-python-1ca43e387564d7b43f04c20b4372eaa470de910c.tar.gz
QPID-5206 : Applied patch from David Ingham
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1535365 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
-rw-r--r--qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java4
-rw-r--r--qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/LinkEndpoint.java17
-rw-r--r--qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/SessionEndpoint.java9
3 files changed, 21 insertions, 9 deletions
diff --git a/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java b/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java
index c64b39c5a4..75243d1c43 100644
--- a/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java
+++ b/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java
@@ -921,7 +921,9 @@ public class SessionImpl implements Session, QueueSession, TopicSession
consumers.remove();
try
{
- _connection.getExceptionListener().onException(e);
+ ExceptionListener expListener = _connection.getExceptionListener();
+ if (expListener != null)
+ expListener.onException(e);
consumer.close();
}
catch (JMSException e1)
diff --git a/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/LinkEndpoint.java b/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/LinkEndpoint.java
index 587d26026f..a89844afd4 100644
--- a/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/LinkEndpoint.java
+++ b/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/LinkEndpoint.java
@@ -395,14 +395,17 @@ public abstract class LinkEndpoint<T extends LinkEventListener>
default:
return;
}
+
+ if (getSession().getState() != SessionState.END_RECVD)
+ {
+ Detach detach = new Detach();
+ detach.setHandle(getLocalHandle());
+ if(close)
+ detach.setClosed(close);
+ detach.setError(error);
- Detach detach = new Detach();
- detach.setHandle(getLocalHandle());
- if(close)
- detach.setClosed(close);
- detach.setError(error);
-
- getSession().sendDetach(detach);
+ getSession().sendDetach(detach);
+ }
getLock().notifyAll();
}
diff --git a/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/SessionEndpoint.java b/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/SessionEndpoint.java
index 0ab2e1a9b7..7e72ce55a3 100644
--- a/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/SessionEndpoint.java
+++ b/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/SessionEndpoint.java
@@ -187,9 +187,16 @@ public class SessionEndpoint
private void detachLinks()
{
Collection<UnsignedInteger> handles = new ArrayList<UnsignedInteger>(_remoteLinkEndpoints.keySet());
+ Error error = new Error();
+ error.setCondition(LinkError.DETACH_FORCED);
+ error.setDescription("Force detach the link because the session is remotely ended.");
for(UnsignedInteger handle : handles)
{
- detach(handle, null);
+ Detach detach = new Detach();
+ detach.setClosed(false);
+ detach.setHandle(handle);
+ detach.setError(error);
+ detach(handle, detach);
}
}