[jboss-cvs] JBossAS SVN: r110556 - projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Feb 7 10:00:23 EST 2011


Author: jesper.pedersen
Date: 2011-02-07 10:00:23 -0500 (Mon, 07 Feb 2011)
New Revision: 110556

Modified:
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java
Log:
Synchronize access to pool size due fix race with pool filler

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java	2011-02-07 14:23:46 UTC (rev 110555)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java	2011-02-07 15:00:23 UTC (rev 110556)
@@ -184,6 +184,19 @@
    }
 
    /**
+    * Check if the pool has reached a certain size
+    * @param size The size
+    * @return True if reached; otherwise false
+    */
+   private boolean isSize(int size)
+   {
+      synchronized (cls)
+      {
+         return (cls.size() + checkedOut.size()) >= size;
+      }
+   }
+
+   /**
     * {@inheritDoc}
     */
    public void reenable()
@@ -402,7 +415,7 @@
          checkedOut.remove(cl);
 
          // This is really an error
-         if (!kill && cls.size() >= poolConfiguration.getMaxSize())
+         if (!kill && isSize(poolConfiguration.getMaxSize() + 1))
          {
             log.warn("Destroying returned connection, maximum pool size exceeded " + cl);
             kill = true;
@@ -591,7 +604,7 @@
                      return;
 
                   // We already have enough connections
-                  if (poolConfiguration.getMinSize() - (cls.size() + checkedOut.size()) <= 0)
+                  if (isSize(poolConfiguration.getMinSize()))
                      return;
 
                   // Create a connection to fill the pool
@@ -687,7 +700,8 @@
       
       if (poolConfiguration.isStrictMin())
       {
-         remove = cls.size() > poolConfiguration.getMinSize();
+         // Add 1 to min-pool-size since it is strict
+         remove = isSize(poolConfiguration.getMinSize() + 1);
 
          if (trace)
             log.trace("StrictMin is active. Current connection will be removed is " + remove);



More information about the jboss-cvs-commits mailing list