Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@www.apache.org Received: (qmail 16513 invoked from network); 16 May 2005 12:08:53 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 16 May 2005 12:08:53 -0000 Received: (qmail 49567 invoked by uid 500); 16 May 2005 11:08:30 -0000 Delivered-To: apmail-jakarta-commons-dev-archive@jakarta.apache.org Received: (qmail 49491 invoked by uid 500); 16 May 2005 11:08:28 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 49383 invoked by uid 500); 16 May 2005 11:08:26 -0000 Received: (qmail 49366 invoked by uid 99); 16 May 2005 11:08:26 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Mon, 16 May 2005 04:08:24 -0700 Received: (qmail 93221 invoked by uid 65534); 16 May 2005 11:08:10 -0000 Message-ID: <20050516110810.93220.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Subject: svn commit: r170359 - in /jakarta/commons/proper/pool/trunk/src: java/org/apache/commons/pool/impl/StackObjectPool.java test/org/apache/commons/pool/impl/TestStackObjectPool.java Date: Mon, 16 May 2005 11:08:10 -0000 To: commons-cvs@jakarta.apache.org From: dirkv@apache.org X-Mailer: svnmailer-1.0.0-dev X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: dirkv Date: Mon May 16 04:08:09 2005 New Revision: 170359 URL: http://svn.apache.org/viewcvs?rev=3D170359&view=3Drev Log: ASF Bugzilla Bug 34902 [pool] StackObjectPool.releaseObject(...) has silly = behavior when the pool is full - report & patch by Sandy McArthur Modified: jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl= /StackObjectPool.java jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl= /TestStackObjectPool.java Modified: jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/poo= l/impl/StackObjectPool.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/ja= va/org/apache/commons/pool/impl/StackObjectPool.java?rev=3D170359&r1=3D1703= 58&r2=3D170359&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl= /StackObjectPool.java (original) +++ jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl= /StackObjectPool.java Mon May 16 04:08:09 2005 @@ -38,6 +38,7 @@ * artificial limits. * * @author Rodney Waldhoff + * @author Dirk Verbeeck * @version $Revision$ $Date$ */ public class StackObjectPool extends BaseObjectPool implements ObjectPool { @@ -157,10 +158,14 @@ =20 synchronized(this) { _numActive--; - if(_pool.size() >=3D _maxSleeping) { - shouldDestroy =3D true; - } else if(success) { + if (success) { + Object toBeDestroyed =3D null; + if(_pool.size() >=3D _maxSleeping) { + shouldDestroy =3D true; + toBeDestroyed =3D _pool.remove(0); // remove the stale= st object + } _pool.push(obj); + obj =3D toBeDestroyed; // swap returned obj with the stale= st one so it can be destroyed } notifyAll(); // _numActive has changed } Modified: jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/poo= l/impl/TestStackObjectPool.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/te= st/org/apache/commons/pool/impl/TestStackObjectPool.java?rev=3D170359&r1=3D= 170358&r2=3D170359&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl= /TestStackObjectPool.java (original) +++ jakarta/commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl= /TestStackObjectPool.java Mon May 16 04:08:09 2005 @@ -18,6 +18,8 @@ =20 import java.util.BitSet; import java.util.NoSuchElementException; +import java.util.List; +import java.util.ArrayList; =20 import junit.framework.Test; import junit.framework.TestSuite; @@ -28,6 +30,7 @@ =20 /** * @author Rodney Waldhoff + * @author Dirk Verbeeck * @version $Revision$ $Date$ */ public class TestStackObjectPool extends TestObjectPool { @@ -203,7 +206,56 @@ } } =20 - =20 + private final List destroyed =3D new ArrayList(); + public void testReturnObjectDiscardOrder() throws Exception { + // setup + // We need a factory that tracks what was discarded. + PoolableObjectFactory pof =3D new PoolableObjectFactory() { + int i =3D 0; + public Object makeObject() throws Exception { + return new Integer(i++); + } + + public void destroyObject(Object obj) throws Exception { + destroyed.add(obj); + } + + public boolean validateObject(Object obj) { + return obj instanceof Integer; + } + + public void activateObject(Object obj) throws Exception { + } + + public void passivateObject(Object obj) throws Exception { + } + }; + ObjectPool pool =3D new StackObjectPool(pof, 3); + + // borrow more objects than the pool can hold + Integer i0 =3D (Integer)pool.borrowObject(); + Integer i1 =3D (Integer)pool.borrowObject(); + Integer i2 =3D (Integer)pool.borrowObject(); + Integer i3 =3D (Integer)pool.borrowObject(); + + // tests + // return as many as the pool will hold. + pool.returnObject(i0); + pool.returnObject(i1); + pool.returnObject(i2); + + // the pool should now be full. + assertEquals("No returned objects should have been destroyed yet."= ,0, destroyed.size()); + + // cause the pool to discard a returned object. + pool.returnObject(i3); + assertEquals("One object should have been destroyed.", 1, destroye= d=2Esize()); + + // check to see what object was destroyed + Integer d =3D (Integer)destroyed.get(0); + assertEquals("Destoryed objects should have the stalest object.", = i0, d); + } + static class SimpleFactory implements PoolableObjectFactory { int counter =3D 0; public Object makeObject() { return String.valueOf(counter++); } --------------------------------------------------------------------- To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: commons-dev-help@jakarta.apache.org