This is an automated email from the ASF dual-hosted git repository.

ggregory 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 41f4e41  [POOL-374] 
org.apache.commons.pool2.impl.GenericKeyedObjectPool.returnObject(K, T) should 
throw IllegalStateException instead of NullPointerException when a key is not 
found in the pool map.
41f4e41 is described below

commit 41f4e410b3e7dc34b294ac9941721073bf5e5271
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Aug 26 18:23:20 2019 -0400

    [POOL-374]
    org.apache.commons.pool2.impl.GenericKeyedObjectPool.returnObject(K, T)
    should throw IllegalStateException instead of NullPointerException when
    a key is not found in the pool map.
---
 src/changes/changes.xml                                      |  7 ++++++-
 .../apache/commons/pool2/impl/GenericKeyedObjectPool.java    |  5 +++++
 .../commons/pool2/impl/TestGenericKeyedObjectPool.java       | 12 ++++++++++--
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 929d1d9..89b89a5 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -43,7 +43,12 @@ The <action> type attribute can be add,update,fix,remove.
     <title>Apache Commons Pool Release Notes</title>
   </properties>
   <body>
-  <release version="2.7.0" date="2019-MM-DD" description="This is a feature 
release (Java 8).">
+  <release version="2.7.1" date="2019-MM-DD" description="This is a 
maintenance release (Java 8).">
+    <action dev="ggregory" issue="POOL-374" type="fix" due-to="Gary Gregory, 
Phil Steitz">
+       org.apache.commons.pool2.impl.GenericKeyedObjectPool.returnObject(K, T) 
should throw IllegalStateException instead of NullPointerException when a key 
is not found in the pool map.
+    </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">
        Update from Java 7 to Java 8.
     </action>
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 b3fc96f..7a282f1 100644
--- a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
@@ -447,6 +447,11 @@ public class GenericKeyedObjectPool<K, T> extends 
BaseGenericObjectPool<T>
 
         final ObjectDeque<T> objectDeque = poolMap.get(key);
 
+        if (objectDeque == null) {
+            throw new IllegalStateException(
+                    "Returned object not currently part of this pool");
+        }
+
         final PooledObject<T> p = objectDeque.getAllObjects().get(new 
IdentityWrapper<>(obj));
 
         if (p == null) {
diff --git 
a/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java 
b/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
index 7b5b5ac..f148bc0 100644
--- 
a/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
+++ 
b/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
@@ -195,6 +195,13 @@ public class TestGenericKeyedObjectPool extends 
TestKeyedObjectPool {
         assertEquals(2,gkoPool.getNumIdle("B"));
     }
 
+    @Test(expected = IllegalStateException.class)
+    public void testReturnObjectThrowsIllegalStateException() {
+        try (final GenericKeyedObjectPool<String, String> pool = new 
GenericKeyedObjectPool<>(new SimpleFactory<String>())) {
+            pool.returnObject("Foo", "Bar");
+        }
+    }
+
     @Test(timeout=60000)
     public void testMaxIdle() throws Exception {
         gkoPool.setMaxTotalPerKey(100);
@@ -1069,7 +1076,7 @@ public class TestGenericKeyedObjectPool extends 
TestKeyedObjectPool {
         final int numThreads = 40;
         final int maxTotal = 40;
 
-        final GenericKeyedObjectPoolConfig config = new 
GenericKeyedObjectPoolConfig();
+        final GenericKeyedObjectPoolConfig<String> config = new 
GenericKeyedObjectPoolConfig<String>();
         config.setMaxTotalPerKey(maxTotal);
         config.setFairness(true);
         config.setLifo(false);
@@ -1086,7 +1093,7 @@ public class TestGenericKeyedObjectPool extends 
TestKeyedObjectPool {
         // Start and park threads waiting to borrow objects
         final TestThread[] threads = new TestThread[numThreads];
         for(int i=0;i<numThreads;i++) {
-            threads[i] = new TestThread(gkoPool, 1, 0, 2000, false, "0" + 
String.valueOf(i % maxTotal), "0");
+            threads[i] = new TestThread<String>(gkoPool, 1, 0, 2000, false, 
"0" + String.valueOf(i % maxTotal), "0");
             final Thread t = new Thread(threads[i]);
             t.start();
             // Short delay to ensure threads start in correct order
@@ -2371,6 +2378,7 @@ public class TestGenericKeyedObjectPool extends 
TestKeyedObjectPool {
             return new DefaultPooledObject<>(value);
         }
     }
+    
 }
 
 

Reply via email to