/[Apache-SVN]/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java
ViewVC logotype

Diff of /jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

--- jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java	2005/05/16 11:05:08	170358
+++ jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java	2005/05/16 11:08:09	170359
@@ -38,6 +38,7 @@ import org.apache.commons.pool.PoolableO
  * artificial limits.
  *
  * @author Rodney Waldhoff
+ * @author Dirk Verbeeck
  * @version $Revision$ $Date$
  */
 public class StackObjectPool extends BaseObjectPool implements ObjectPool {
@@ -157,10 +158,14 @@ public class StackObjectPool extends Bas
 
         synchronized(this) {
             _numActive--;
-            if(_pool.size() >= _maxSleeping) {
-                shouldDestroy = true;
-            } else if(success) {
+            if (success) {
+                Object toBeDestroyed = null;
+                if(_pool.size() >= _maxSleeping) {
+                    shouldDestroy = true;
+                    toBeDestroyed = _pool.remove(0); // remove the stalest object
+                }
                 _pool.push(obj);
+                obj = toBeDestroyed; // swap returned obj with the stalest one so it can be destroyed
             }
             notifyAll(); // _numActive has changed
         }

 

infrastructure at apache.org
ViewVC Help
Powered by ViewVC 1.1.26