[
https://issues.apache.org/jira/browse/DBCP-459?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mark Thomas resolved DBCP-459.
------------------------------
Resolution: Fixed
Fix Version/s: 2.2
> InterruptedException consumed and not reset by
> PoolingDataSource.getConnection()
> --------------------------------------------------------------------------------
>
> Key: DBCP-459
> URL: https://issues.apache.org/jira/browse/DBCP-459
> Project: Commons Dbcp
> Issue Type: Bug
> Affects Versions: 2.1.1
> Reporter: Atsushi Nakagawa
> Priority: Minor
> Fix For: 2.2
>
>
> If while {{PoolingDataSource.getConnection()}} is waiting for an available
> connection, {{Thread.interrupt()}} is called against the current thread, an
> {{java.lang.InterruptedException}} is caught internally but not reset.
> It is however thrown out wrapped in an {{java.sql.SQLException}}.
> A stack trace of such an occurrence is as follows:
> {noformat}
> java.sql.SQLException: Cannot get a connection, general error
> at
> org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:146)
> at
> org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1533)
> Caused by: java.lang.InterruptedException
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1220)
> at
> java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:335)
> at
> org.apache.commons.pool2.impl.LinkedBlockingDeque.pollFirst(LinkedBlockingDeque.java:624)
> at
> org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:444)
> at
> org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
> at
> org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:134)
> ... 8 more
> {noformat}
> Since the interrupt status flag is not reset, it is left to the caller to
> look out for it and perform the interrupt specific logic, or reset the flag.
> i.e.
> {code:java}
> try {
> ds.getConnection()
> } catch (SQLException e) {
> if (e.getCause() instanceof InterruptedException) {
> Thread.current.interrupted();
> }
> ...
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)