[
https://issues.apache.org/jira/browse/POOL-340?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16459125#comment-16459125
]
Phil Steitz commented on POOL-340:
----------------------------------
Another workaround-ish idea is to achieve the effect of propagation of the
swallowed exception on returnObject by configuring a
SwallowedExceptionListener. See
BaseGenericObjectPool#setSwallowedExceptionListener.
One more note on this. If threads are waiting on borrow requests and there are
no idle instances available and a return fails validation, the current code
does try to create a new instance to "replace" the one failing validation. If
that create fails with an exception, the failure can be picked up with a
SwallowedExceptionListener.
> borrowObject is stuck, if create fails
> --------------------------------------
>
> Key: POOL-340
> URL: https://issues.apache.org/jira/browse/POOL-340
> Project: Commons Pool
> Issue Type: Bug
> Affects Versions: 2.4, 2.4.1, 2.4.2, 2.4.3, 2.5.0
> Reporter: Pavel Kolesov
> Priority: Critical
>
> After changes in 2.4.3 there is a high chance of a scenario, in which
> borrowObject waits infinitely, if create fails or no one calls a create.
> {noformat}
> java.lang.Thread.State: WAITING (parking)
> at sun.misc.Unsafe.park(Native Method)
> - parking to wait for <0x0000000083cfd978> (a
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
> at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
> at
> org.apache.commons.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:583)
> at
> org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:442)
> at
> org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
> {noformat}
> If pool is exhausted, when borrowObject tries to get idle object, it waits
> for new object to be created.
> If all objects are returned to pool invalid and destroyed, and it is
> impossible to create a new one, borrowObject will not return.
> Even if afterwards it is becomes possible to crate a new object but no one
> creates it, borrowObject will not return either.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)