Author: markt
Date: Tue May 17 22:21:43 2011
New Revision: 1104601
URL: http://svn.apache.org/viewvc?rev=1104601&view=rev
Log:
Make Phil's suggested changes to (hopefully) fix issues when testing with
commons-performance
Modified:
commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
Modified:
commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
URL:
http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java?rev=1104601&r1=1104600&r2=1104601&view=diff
==============================================================================
---
commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
(original)
+++
commons/proper/pool/trunk/src/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
Tue May 17 22:21:43 2011
@@ -1078,7 +1078,7 @@ public class GenericKeyedObjectPool<K,T>
_factory.activateObject(key, p.getObject());
} catch (Exception e) {
try {
- destroy(key, p);
+ destroy(key, p, true);
} catch (Exception e1) {
// Ignore - activation failure is more important
}
@@ -1100,7 +1100,7 @@ public class GenericKeyedObjectPool<K,T>
}
if (!validate) {
try {
- destroy(key, p);
+ destroy(key, p, true);
} catch (Exception e) {
// Ignore - validation failure is more
important
}
@@ -1155,7 +1155,7 @@ public class GenericKeyedObjectPool<K,T>
if (getTestOnReturn()) {
if (!_factory.validateObject(key, t)) {
try {
- destroy(key, p);
+ destroy(key, p, true);
} catch (Exception e) {
// TODO - Ignore?
}
@@ -1167,7 +1167,7 @@ public class GenericKeyedObjectPool<K,T>
_factory.passivateObject(key, t);
} catch (Exception e1) {
try {
- destroy(key, p);
+ destroy(key, p, true);
} catch (Exception e) {
// TODO - Ignore?
}
@@ -1184,7 +1184,7 @@ public class GenericKeyedObjectPool<K,T>
if (isClosed() || maxIdle > -1 && maxIdle <= idleObjects.size()) {
try {
- destroy(key, p);
+ destroy(key, p, true);
} catch (Exception e) {
// TODO - Ignore?
}
@@ -1200,8 +1200,8 @@ public class GenericKeyedObjectPool<K,T>
/**
* {@inheritDoc}
- * <p>Activation of this method decrements the active count associated
with the given keyed pool
- * and attempts to destroy <code>obj.</code></p>
+ * <p>Activation of this method decrements the active count associated
with
+ * the given keyed pool and attempts to destroy <code>obj.</code></p>
*
* @param key pool key
* @param obj instance to invalidate
@@ -1217,7 +1217,7 @@ public class GenericKeyedObjectPool<K,T>
throw new IllegalStateException(
"Object not currently part of this pool");
}
- destroy(key, p);
+ destroy(key, p, true);
}
@@ -1247,7 +1247,8 @@ public class GenericKeyedObjectPool<K,T>
/**
- * Clears the specified pool, removing all pooled instances corresponding
to the given <code>key</code>.
+ * Clears the specified pool, removing all pooled instances corresponding
+ * to the given <code>key</code>.
*
* @param key the key to clear
*/
@@ -1268,7 +1269,7 @@ public class GenericKeyedObjectPool<K,T>
while (p != null) {
try {
- destroy(key, p);
+ destroy(key, p, true);
} catch (Exception e) {
// TODO - Ignore?
}
@@ -1417,7 +1418,7 @@ public class GenericKeyedObjectPool<K,T>
K key = entry.getValue();
PooledObject<T> p = entry.getKey();
try {
- destroy(key, p);
+ destroy(key, p, false);
} catch (Exception e) {
// TODO - Ignore?
}
@@ -1506,7 +1507,7 @@ public class GenericKeyedObjectPool<K,T>
}
if (idleEvictTime < underTest.getIdleTimeMillis()) {
- destroy(evictionKey, underTest);
+ destroy(evictionKey, underTest, true);
} else {
if (testWhileIdle) {
boolean active = false;
@@ -1515,18 +1516,18 @@ public class GenericKeyedObjectPool<K,T>
underTest.getObject());
active = true;
} catch (Exception e) {
- destroy(evictionKey, underTest);
+ destroy(evictionKey, underTest, true);
}
if (active) {
if (!_factory.validateObject(evictionKey,
underTest.getObject())) {
- destroy(evictionKey, underTest);
+ destroy(evictionKey, underTest, true);
} else {
try {
_factory.passivateObject(evictionKey,
underTest.getObject());
} catch (Exception e) {
- destroy(evictionKey, underTest);
+ destroy(evictionKey, underTest, true);
}
}
}
@@ -1585,20 +1586,24 @@ public class GenericKeyedObjectPool<K,T>
return p;
}
- private void destroy(K key, PooledObject<T> toDestory) throws Exception {
+ private void destroy(K key, PooledObject<T> toDestory, boolean always)
+ throws Exception {
register(key);
try {
ObjectDeque<T> objectDeque = poolMap.get(key);
- objectDeque.getIdleObjects().remove(toDestory);
- objectDeque.getAllObjects().remove(toDestory.getObject());
-
- try {
- _factory.destroyObject(key, toDestory.getObject());
- } finally {
- objectDeque.getCreateCount().decrementAndGet();
- numTotal.decrementAndGet();
+ boolean isIdle = objectDeque.getIdleObjects().remove(toDestory);
+
+ if (isIdle || always) {
+ objectDeque.getAllObjects().remove(toDestory.getObject());
+
+ try {
+ _factory.destroyObject(key, toDestory.getObject());
+ } finally {
+ objectDeque.getCreateCount().decrementAndGet();
+ numTotal.decrementAndGet();
+ }
}
} finally {
deregister(key);