[ https://issues.apache.org/jira/browse/POOL-326?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16915885#comment-16915885 ]
Phil Steitz commented on POOL-326: ---------------------------------- Here is stack trace of the NPE {noformat} [java] java.lang.NullPointerException [java] at org.apache.commons.pool2.impl.GenericKeyedObjectPool.returnObject(GenericKeyedObjectPool.java:450) [java] at org.apache.commons.performance.pool.PoolClientThread.execute(Unknown Source) [java] at org.apache.commons.performance.ClientThread.run(Unknown Source) [java] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [java] at java.lang.Thread.run(Thread.java:748) {noformat} This is running against the 2.7.0 release jar. The GKOP line is in returnObject, when dereferencing the ObjectDeque returned by the poolMap lookup. The commons performance code is a forked version of what is in the sandbox repo. PoolClientThreads just generate random (Integer) keys, borrow objects under those keys and then return them. The factory adds make, destroy and validate latency. > Threading issue, NullPointerException and IllegalStateException in > GenericKeyedObjectPool > ----------------------------------------------------------------------------------------- > > Key: POOL-326 > URL: https://issues.apache.org/jira/browse/POOL-326 > Project: Commons Pool > Issue Type: Bug > Affects Versions: 2.4.2 > Reporter: Chris Allison > Priority: Major > Fix For: 2.6.1 > > Attachments: ObjectPoolIssue.java, pool-326.patch > > > I'll included a test to help reproduce this issue. Take a look at the > embedded comments as it's extremely difficult to reproduce. I've seen the > provided test show the failure on more than one PC so I believe it will show > the problem. > Example stack trace for error on return: > java.util.concurrent.ExecutionException: java.lang.NullPointerException > at java.util.concurrent.FutureTask.report(FutureTask.java:122) > at java.util.concurrent.FutureTask.get(FutureTask.java:192) > at threading_pool.ObjectPoolIssue.run(ObjectPoolIssue.java:63) > at threading_pool.ObjectPoolIssue.main(ObjectPoolIssue.java:23) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) > Caused by: java.lang.NullPointerException > at > org.apache.commons.pool2.impl.GenericKeyedObjectPool.returnObject(GenericKeyedObjectPool.java:474) > at threading_pool.ObjectPoolIssue$Task.call(ObjectPoolIssue.java:112) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > Example stack trace for error on borrow: > java.util.concurrent.ExecutionException: java.lang.NullPointerException > at java.util.concurrent.FutureTask.report(FutureTask.java:122) > at java.util.concurrent.FutureTask.get(FutureTask.java:192) > at threading_pool.ObjectPoolIssue.run(ObjectPoolIssue.java:63) > at threading_pool.ObjectPoolIssue.main(ObjectPoolIssue.java:23) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) > Caused by: java.lang.NullPointerException > at > org.apache.commons.pool2.impl.GenericKeyedObjectPool.deregister(GenericKeyedObjectPool.java:1146) > at > org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:438) > at > org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:279) > at threading_pool.ObjectPoolIssue$Task.call(ObjectPoolIssue.java:108) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) -- This message was sent by Atlassian Jira (v8.3.2#803003)