Mark Struberg created POOL-356:
----------------------------------

             Summary: deadlock if borrowObject gets called to fast and maxIdle 
is 0
                 Key: POOL-356
                 URL: https://issues.apache.org/jira/browse/POOL-356
             Project: Commons Pool
          Issue Type: Bug
    Affects Versions: 2.6.0
            Reporter: Mark Struberg
            Assignee: Mark Struberg
             Fix For: 2.6.1


I figured this while creating a unit test for OpenJPA. But also did see this in 
real production with commons-dbcp2. See DBCP-513 for more info.

See this comment for a precise explanation what happens 
https://issues.apache.org/jira/browse/DBCP-513?focusedCommentId=16660545&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-16660545

The problem is basically that the logic to immediately destroy a pool object 
does not notify the DeLinkedQueue:

{code}
        if (isClosed() || maxIdleSave > -1 && maxIdleSave <= 
idleObjects.size()) {
            try {
                destroy(p);
{code}

But the borrowObject code is locking on that condition...
{code}
                    if (borrowMaxWaitMillis < 0) {
                        p = idleObjects.takeFirst();
                    } 
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to