You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ps...@apache.org on 2007/12/27 21:15:32 UTC

svn commit: r607117 - in /commons/proper/pool/branches/1_4_RELEASE_BRANCH/src: java/org/apache/commons/pool/impl/GenericObjectPool.java test/org/apache/commons/pool/TestObjectPool.java

Author: psteitz
Date: Thu Dec 27 12:15:31 2007
New Revision: 607117

URL: http://svn.apache.org/viewvc?rev=607117&view=rev
Log:
Fixed an error introduced in r385746 (post-1.3 changes to
improve exception management). When passivate throws an
exception while returning an object, after destroying the
instance, numActive needs to be decremented.  

Modified:
    commons/proper/pool/branches/1_4_RELEASE_BRANCH/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
    commons/proper/pool/branches/1_4_RELEASE_BRANCH/src/test/org/apache/commons/pool/TestObjectPool.java

Modified: commons/proper/pool/branches/1_4_RELEASE_BRANCH/src/java/org/apache/commons/pool/impl/GenericObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/branches/1_4_RELEASE_BRANCH/src/java/org/apache/commons/pool/impl/GenericObjectPool.java?rev=607117&r1=607116&r2=607117&view=diff
==============================================================================
--- commons/proper/pool/branches/1_4_RELEASE_BRANCH/src/java/org/apache/commons/pool/impl/GenericObjectPool.java (original)
+++ commons/proper/pool/branches/1_4_RELEASE_BRANCH/src/java/org/apache/commons/pool/impl/GenericObjectPool.java Thu Dec 27 12:15:31 2007
@@ -1082,6 +1082,13 @@
                 } catch (Exception e2) {
                     // swallowed
                 }
+                // TODO: Correctness here depends on control in addObjectToPool.
+                // These two methods should be refactored, removing the 
+                // "behavior flag",decrementNumActive, from addObjectToPool.
+                synchronized(this) {
+                    _numActive--;
+                    notifyAll();
+                }
             }
         }
     }

Modified: commons/proper/pool/branches/1_4_RELEASE_BRANCH/src/test/org/apache/commons/pool/TestObjectPool.java
URL: http://svn.apache.org/viewvc/commons/proper/pool/branches/1_4_RELEASE_BRANCH/src/test/org/apache/commons/pool/TestObjectPool.java?rev=607117&r1=607116&r2=607117&view=diff
==============================================================================
--- commons/proper/pool/branches/1_4_RELEASE_BRANCH/src/test/org/apache/commons/pool/TestObjectPool.java (original)
+++ commons/proper/pool/branches/1_4_RELEASE_BRANCH/src/test/org/apache/commons/pool/TestObjectPool.java Thu Dec 27 12:15:31 2007
@@ -273,14 +273,19 @@
 
         //// Test exception handling of returnObject
         reset(pool, factory, expectedMethods);
-
+        pool.addObject();
+        pool.addObject();
+        pool.addObject();
+        assertEquals(3, pool.getNumIdle());
         // passivateObject should swallow exceptions and not add the object to the pool
-        idleCount = pool.getNumIdle();
         obj = pool.borrowObject();
+        Object obj2 = pool.borrowObject();
+        assertEquals(1, pool.getNumIdle());
+        assertEquals(2, pool.getNumActive());
         clear(factory, expectedMethods);
         factory.setPassivateObjectFail(true);
         pool.returnObject(obj);
-       // StackObjectPool, SoftReferenceObjectPool also validate on return
+        // StackObjectPool, SoftReferenceObjectPool also validate on return
         if (pool instanceof StackObjectPool || 
                 pool instanceof SoftReferenceObjectPool) {
             expectedMethods.add(new MethodCall(
@@ -289,7 +294,8 @@
         expectedMethods.add(new MethodCall("passivateObject", obj));
         removeDestroyObjectCall(factory.getMethodCalls()); // The exact timing of destroyObject is flexible here.
         assertEquals(expectedMethods, factory.getMethodCalls());
-        assertEquals(idleCount, pool.getNumIdle());
+        assertEquals(1, pool.getNumIdle());   // Not returned
+        assertEquals(1, pool.getNumActive()); // But not in active count
 
         // destroyObject should swallow exceptions too
         reset(pool, factory, expectedMethods);