This is an automated email from the ASF dual-hosted git repository. psteitz pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-pool.git
The following commit(s) were added to refs/heads/master by this push: new 7d03306 Add check to make sure keyed pool being removed is empty. Fixes POOL-326. 7d03306 is described below commit 7d033060b08cedc9b54bdc1f8951a872870cdadb Author: psteitz <pste...@apache.org> AuthorDate: Wed Sep 25 18:04:46 2019 -0700 Add check to make sure keyed pool being removed is empty. Fixes POOL-326. --- src/changes/changes.xml | 3 +++ .../java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index e492893..528f265 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -53,6 +53,9 @@ The <action> type attribute can be add,update,fix,remove. <action dev="psteitz" issue="POOL-376" type="fix" due-to="Sazzadul Hoque, Phil Steitz"> Fixed regression from original fix for POOL-356 which could result in NPE when destroying objects. </action> + <action dev="psteitz" issue="POOL-326" type="fix" due-to="Phil Steitz"> + Eliminated NPE / ISE exceptions due to keyed pools being prematurely removed. + </action> </release> <release version="2.7.0" date="2019-07-25" description="This is a feature release (Java 8)."> <action dev="ggregory" issue="POOL-364" type="update" due-to="Gary Gregory"> diff --git a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java index 927a91a..6d8ec69 100644 --- a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java +++ b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java @@ -1170,7 +1170,8 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T> lock.unlock(); lock = keyLock.writeLock(); lock.lock(); - if (objectDeque.getCreateCount().get() == 0 && objectDeque.getNumInterested().get() == 0) { + if (objectDeque.getCreateCount().get() == 0 && objectDeque.getNumInterested().get() == 0 + && objectDeque.allObjects.isEmpty()) { // NOTE: Keys must always be removed from both poolMap and // poolKeyList at the same time while protected by // keyLock.writeLock()