diff options
| -rw-r--r-- | qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java b/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java index 80875fcfa7..20454ace65 100644 --- a/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java +++ b/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java @@ -341,27 +341,40 @@ public class ConnectionImpl implements Connection, QueueConnection, TopicConnect public void close() throws JMSException { - synchronized(_lock) + Object outerLock; + if(_conn != null) + { + outerLock = _conn.getEndpoint().getLock(); + } + else { - if(_state != State.CLOSED) + outerLock = _lock; + } + + synchronized (outerLock) + { + synchronized(_lock) { - stop(); - List<SessionImpl> sessions = new ArrayList<SessionImpl>(_sessions); - for(SessionImpl session : sessions) - { - session.close(); - } - for(CloseTask task : _closeTasks) + if(_state != State.CLOSED) { - task.onClose(); - } - if(_conn != null && _state != State.UNCONNECTED ) { - _conn.close(); + stop(); + List<SessionImpl> sessions = new ArrayList<SessionImpl>(_sessions); + for(SessionImpl session : sessions) + { + session.close(); + } + for(CloseTask task : _closeTasks) + { + task.onClose(); + } + if(_conn != null && _state != State.UNCONNECTED ) { + _conn.close(); + } + _state = State.CLOSED; } - _state = State.CLOSED; - } - _lock.notifyAll(); + _lock.notifyAll(); + } } } |
