Author: aidan
Date: Mon Apr 21 04:13:52 2008
New Revision: 650099

URL: http://svn.apache.org/viewvc?rev=650099&view=rev
Log:
QPID-832 Make sure that we lock early enough to avoid deadlocks hwen closing

Modified:
    
incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java

Modified: 
incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java?rev=650099&r1=650098&r2=650099&view=diff
==============================================================================
--- 
incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
 (original)
+++ 
incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
 Mon Apr 21 04:13:52 2008
@@ -913,31 +913,31 @@
     {
         synchronized(_sessionCreationLock)
         {
-            if(!sessions.isEmpty())
-            {
-                AMQSession session = sessions.remove(0);
-                synchronized(session.getMessageDeliveryLock())
-                {
-                    close(sessions, timeout);
-                }
-            }
-            else
+            synchronized (getFailoverMutex())
             {
                 if (!_closed.getAndSet(true))
                 {
-                    synchronized (getFailoverMutex())
+                    if(!sessions.isEmpty())
+                    {
+                        AMQSession session = sessions.remove(0);
+                        synchronized(session.getMessageDeliveryLock())
+                        {
+                            close(sessions, timeout);
+                        }
+                    }
+                    else
                     {
                         try
                         {
                             long startCloseTime = System.currentTimeMillis();
 
-                        closeAllSessions(null, timeout, startCloseTime);
+                            closeAllSessions(null, timeout, startCloseTime);
 
-                        //This MUST occur after we have successfully closed 
all Channels/Sessions
-                        _taskPool.shutdown();
+                            //This MUST occur after we have successfully 
closed all Channels/Sessions
+                            _taskPool.shutdown();
 
-                        if (!_taskPool.isTerminated())
-                        {
+                            if (!_taskPool.isTerminated())
+                            {
                                 try
                                 {
                                     // adjust timeout


Reply via email to