Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.6.0
-
None
Description
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:
if (isClosed() || maxIdleSave > -1 && maxIdleSave <= idleObjects.size()) { try { destroy(p);
But the borrowObject code is locking on that condition...
if (borrowMaxWaitMillis < 0) {
p = idleObjects.takeFirst();
}