[ 
https://issues.apache.org/jira/browse/POOL-326?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16918148#comment-16918148
 ] 

Phil Steitz commented on POOL-326:
----------------------------------

[~ggregory] - it will take me a little while to get the changes to 
o.a.c.performance in a state where I can commit them.  I will do that. I have 
not tried, but I suspect even just setting up the ancient code in trunk there 
with the config above would cause the NPE.  It does not happen on every run and 
the frustrating thing is that when I use the multi-thread loading framework in 
TestGenericKeyedObjectPool, I can't get it to happen.  Hope through research...

I added some instrumentation into GKOP though to see what is going on when the 
exception hits and it is what I suspected - the returning object is in 
idleObjects.  So yet another way to make the exception go away and probably a 
good fix in any case is to change the test in deregister to check 
idleObjects.size instead of relying on createCount.  What bugs me is I can't 
figure out how createCount is getting zeroed when there is an instance out in 
circulation.

> 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)

Reply via email to