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 | 6a5fc1a0afb98c19cc6c38655932fb8193b422ee (patch) | |
| tree | 1aedc9aa7d1ccc57d6e45e82a5975a716d5cbad6 | |
| parent | 55e91534122ae033b164d8eb3b0d194165acc6a7 (diff) | |
| download | qpid-python-6a5fc1a0afb98c19cc6c38655932fb8193b422ee.tar.gz | |
QPID-5206 : Applied patch from David Ingham
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1535365 13f79535-47bb-0310-9956-ffa450edef68
3 files changed, 21 insertions, 9 deletions
diff --git a/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java b/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java index c64b39c5a4..75243d1c43 100644 --- a/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/SessionImpl.java +++ b/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/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/LinkEndpoint.java b/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/LinkEndpoint.java index 587d26026f..a89844afd4 100644 --- a/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/LinkEndpoint.java +++ b/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/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/SessionEndpoint.java b/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/SessionEndpoint.java index 0ab2e1a9b7..7e72ce55a3 100644 --- a/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/SessionEndpoint.java +++ b/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); } } |
