diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2013-10-24 12:50:48 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2013-10-24 12:50:48 +0000 |
| commit | 1ca43e387564d7b43f04c20b4372eaa470de910c (patch) | |
| tree | 313f09a2787cc9164edc134a8f633880ac9e95e0 /qpid/java | |
| parent | 779a9279e52481bfa63acea6bf3fe7116257e83a (diff) | |
| download | qpid-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')
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); } } |
