You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by dk...@apache.org on 2011/10/11 14:59:15 UTC

svn commit: r1181763 - /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conn/PoolManager.java

Author: dkazimirchyk
Date: Tue Oct 11 12:59:14 2011
New Revision: 1181763

URL: http://svn.apache.org/viewvc?rev=1181763&view=rev
Log:
CAY-1513 Deadlock in PoolManager

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conn/PoolManager.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conn/PoolManager.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conn/PoolManager.java?rev=1181763&r1=1181762&r2=1181763&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conn/PoolManager.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/conn/PoolManager.java Tue Oct 11 12:59:14 2011
@@ -187,7 +187,7 @@ public class PoolManager implements Data
      * @since 3.1
      */
     @BeforeScopeEnd
-    public void shutdown() throws SQLException {
+    public synchronized void shutdown() throws SQLException {
         
         // disposing maintenance thread first to avoid any changes to pools
         // during shutdown
@@ -544,14 +544,14 @@ public class PoolManager implements Data
                     // ignore...
                 }
 
-                if (shouldDie) {
-                    break;
-                }
-
                 synchronized (pool) {
                     // TODO: implement a smarter algorithm for pool management...
                     // right now it will simply close one connection if the count is
                     // above median and there are any idle connections.
+                    
+                    if (shouldDie) {
+                        break;
+                    }
 
                     int unused = pool.getCurrentlyUnused();
                     int used = pool.getCurrentlyInUse();