Deadlock When Using The Implicit Connection Cache Timetolive or Abandon Timeout
(Doc ID 402788.1)
Last updated on AUGUST 30, 2023
Applies to:
JDBC - Version 10.1.0.5 to 10.2.0.2 [Release 10.1 to 10.2]Information in this document applies to any platform.
This problem can occur on any platform.
Symptoms
An application is retrieving connection from the 10g Oracle JDBC Implicit Connection Cache (ICC). The application hang can happen when the ICC abandon or timetolive timeout are enabled;
A deadlock is occurring when at the same time:
- An internal ICC JDBC thread (related to the timetolive or abandon timeout processing) is closing a JDBC connection.
- Another thread (application thread) is closing the same JDBC connection.
To illustrate this situation, here are the Java Stack dump of those threads [ Thread-11 is the ICC internal JDBC thread and Thread 14 is the application thread. (closing the connection)] :
"Thread-14":
at oracle.jdbc.pool.OracleImplicitConnectionCache.reusePooledConnection(OracleImplicitConnectionCache.java:1389)
- waiting to lock <0x10969fe0> (a oracle.jdbc.pool.OracleImplicitConnectionCache)
at oracle.jdbc.pool.OracleConnectionCacheEventListener.connectionClosed(OracleConnectionCacheEventListener.java:61)
- locked <0x109ad220> (a oracle.jdbc.pool.OracleConnectionCacheEventListener)
at oracle.jdbc.pool.OraclePooledConnection.callImplicitCacheListener(OraclePooledConnection.java:505)
at oracle.jdbc.pool.OraclePooledConnection.logicalCloseForImplicitConnectionCache(OraclePooledConnection.java:426)
at oracle.jdbc.pool.OraclePooledConnection.logicalClose(OraclePooledConnection.java:442)
at oracle.jdbc.driver.LogicalConnection.closeInternal(LogicalConnection.java:220)
at oracle.jdbc.driver.LogicalConnection.close(LogicalConnection.java:193)
- locked <0x109ad240> (a oracle.jdbc.driver.LogicalConnection) at test.TestPool$3.run(TestPool.java:78)
"Thread-11":
at oracle.jdbc.driver.LogicalConnection.close(LogicalConnection.java:193)
- waiting to lock <0x109ad240> (a oracle.jdbc.driver.LogicalConnection)
at oracle.jdbc.pool.OracleImplicitConnectionCache.closeCheckedOutConnection(OracleImplicitConnectionCache.java:1125)
at oracle.jdbc.pool.OracleImplicitConnectionCacheThread.runTimeToLiveTimeout(OracleImplicitConnectionCacheThread.java:152)
- locked <0x10969fe0> (a oracle.jdbc.pool.OracleImplicitConnectionCache)
at oracle.jdbc.pool.OracleImplicitConnectionCacheThread.run(OracleImplicitConnectionCacheThread.java:66 )
Found 1 deadlock.
Changes
Cause
To view full details, sign in with your My Oracle Support account. |
|
Don't have a My Oracle Support account? Click to get started! |
In this Document
Symptoms |
Changes |
Cause |
Solution |
References |