Return-Path: X-Original-To: apmail-qpid-commits-archive@www.apache.org Delivered-To: apmail-qpid-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 096CF10C95 for ; Thu, 7 Nov 2013 08:45:28 +0000 (UTC) Received: (qmail 3016 invoked by uid 500); 7 Nov 2013 08:45:22 -0000 Delivered-To: apmail-qpid-commits-archive@qpid.apache.org Received: (qmail 2359 invoked by uid 500); 7 Nov 2013 08:45:20 -0000 Mailing-List: contact commits-help@qpid.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@qpid.apache.org Delivered-To: mailing list commits@qpid.apache.org Received: (qmail 2335 invoked by uid 99); 7 Nov 2013 08:45:19 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 07 Nov 2013 08:45:19 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 07 Nov 2013 08:45:17 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 0162A23889EC; Thu, 7 Nov 2013 08:44:56 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1539556 - /qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java Date: Thu, 07 Nov 2013 08:44:55 -0000 To: commits@qpid.apache.org From: rgodfrey@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20131107084456.0162A23889EC@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: rgodfrey Date: Thu Nov 7 08:44:55 2013 New Revision: 1539556 URL: http://svn.apache.org/r1539556 Log: QPID-5293 : Thread deadlock when closing connection Modified: qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java Modified: qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java?rev=1539556&r1=1539555&r2=1539556&view=diff ============================================================================== --- qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java (original) +++ qpid/trunk/qpid/java/amqp-1-0-client-jms/src/main/java/org/apache/qpid/amqp_1_0/jms/impl/ConnectionImpl.java Thu Nov 7 08:44:55 2013 @@ -341,27 +341,40 @@ public class ConnectionImpl implements C public void close() throws JMSException { - synchronized(_lock) + Object outerLock; + if(_conn != null) { - if(_state != State.CLOSED) + outerLock = _conn.getEndpoint().getLock(); + } + else + { + outerLock = _lock; + } + + synchronized (outerLock) + { + synchronized(_lock) { - stop(); - List sessions = new ArrayList(_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 sessions = new ArrayList(_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(); + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org For additional commands, e-mail: commits-help@qpid.apache.org