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

Raju Gupta commented on POOL-413:
---------------------------------

+1 to the immutability. In our connection pools as well, we explicitly disallow 
to set the *maxIdle* multiple times. 

So, what's the conclusion here ? I will close the pull request for now if it is 
decided that we won't fix this in pool2 but in pool3. I would like to be a part 
for the changes done in pool3 to solve this issue. 

> [GOP] Race condition while returning objects. maxIdle is ignored
> ----------------------------------------------------------------
>
>                 Key: POOL-413
>                 URL: https://issues.apache.org/jira/browse/POOL-413
>             Project: Commons Pool
>          Issue Type: Bug
>            Reporter: Adrien Bernard
>            Priority: Major
>         Attachments: 
> 0001-Add-test-to-reproduce-concurrency-issue-when-returni.patch
>
>
> In a GenericObjectPool it is possible to configure a maximum number of idle 
> objects to be kept by the pool while they are not in use.
> In unfortunate circumstances, if several threads return an object to the pool 
> at the same time, the check on the maximum number of idle objects may be 
> dismissed. This results in pool keeping more idle objects than configured.
> I have build a unit test to reproduce the issue. I attach it as a patch made 
> on top of release 2.12.0. On my machine it randomly fails with a 10% rate.
> Looking into the source code of the returnObject method of the GOP, it seems 
> that there is no synchronisation between the moment the check is made for the 
> maxIdle configuration and the moment the object is destroyed :
> {code:java}
> final int maxIdleSave = getMaxIdle();
> if (isClosed() || maxIdleSave > -1 && maxIdleSave <= idleObjects.size()) {
>     try {
>         destroy(p, DestroyMode.NORMAL);
>     } catch (final Exception e) {
>         swallowException(e);
>     }
>     try {
>         ensureIdle(1, false);
>     } catch (final Exception e) {
>         swallowException(e);
>     }
> } {code}
> Have you thoughts on this ?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to