Diff of /jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java
Parent Directory
| Revision Log
| Patch
--- jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java 2005/10/29 09:26:21 329381
+++ jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java 2005/10/29 09:45:10 329382
@@ -122,17 +122,23 @@ public class StackObjectPool extends Bas
public synchronized Object borrowObject() throws Exception {
assertOpen();
Object obj = null;
- if (!_pool.empty()) {
- obj = _pool.pop();
- } else {
- if(null == _factory) {
- throw new NoSuchElementException();
+ while (null == obj) {
+ if (!_pool.empty()) {
+ obj = _pool.pop();
} else {
- obj = _factory.makeObject();
+ if(null == _factory) {
+ throw new NoSuchElementException();
+ } else {
+ obj = _factory.makeObject();
+ }
+ }
+ if(null != _factory && null != obj) {
+ _factory.activateObject(obj);
+ }
+ if (null != _factory && null != obj && !_factory.validateObject(obj)) {
+ _factory.destroyObject(obj);
+ obj = null;
}
- }
- if(null != _factory && null != obj) {
- _factory.activateObject(obj);
}
_numActive++;
return obj;