In GenericKeyedObjectPool.borrowObject() there are two instances of:
try {
_factory.destroyObject(key,pair.value);
synchronized (this) {
pool.decrementActiveCount();
}
} catch (Exception e2) {
// swallowed
}
The decrementing of the active count should be moved to a finally block to ensure that it is always called even if destroyObject() throws an exception.
I think this is what DCP-34 is getting at.