Hello, I am using the tomcat jdbc connection pool independently in my web application which is deployed on glassfish web server. While performing a database operation, our application goes into a deadlock state. The two threads involved in the deadlock have the below traces (from a thread dump)
"thread1" Id=534 WAITING on java.util.concurrent.locks.ReentrantReadWriteLock$FairSync@184ffd83 owned by "thread2" Id=529 at sun.misc.Unsafe.park(Native Method) - waiting on java.util.concurrent.locks.ReentrantReadWriteLock$FairSync@184ffd83 at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197) at java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock(ReentrantReadWriteLock.java:945) at com.sun.ejb.containers.CMCSingletonContainer._getContext(CMCSingletonContainer.java:142) at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2528) ... Number of locked synchronizers = 1 - java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync@3f88774b , "thread2" Id=529 WAITING on java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync@3f88774bowned by "thread1" Id=534 at sun.misc.Unsafe.park(Native Method) - waiting on java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync@3f88774b at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197) at java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock(ReentrantReadWriteLock.java:945) at org.apache.tomcat.jdbc.pool.PooledConnection.lock(PooledConnection.java:609) at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:752) ... Number of locked synchronizers = 1 - java.util.concurrent.locks.ReentrantReadWriteLock$FairSync@184ffd83 Having a look at the source code for both <http://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_7_0_34/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java>of these <http://grepcode.com/file/repo1.maven.org/maven2/org.glassfish.ejb/ejb-container/3.1.1/com/sun/ejb/containers/CMCSingletonContainer.java?av=f> I see different lock instances but still the dump indicates that they are the same. Any idea on how can the java.util.lock instances be the same? Thanks, Amit.