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)