[jboss-cvs] JBossAS SVN: r110063 - projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Dec 21 04:59:01 EST 2010
Author: jesper.pedersen
Date: 2010-12-21 04:59:01 -0500 (Tue, 21 Dec 2010)
New Revision: 110063
Modified:
projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnection.java
projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/WrappedConnection.java
Log:
[JBJCA-483] Potential dead lock
Modified: projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnection.java
===================================================================
--- projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnection.java 2010-12-21 09:51:09 UTC (rev 110062)
+++ projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnection.java 2010-12-21 09:59:01 UTC (rev 110063)
@@ -82,7 +82,7 @@
private final boolean readOnly;
- private ReentrantLock lock = new ReentrantLock();
+ private ReentrantLock lock = new ReentrantLock(true);
private final Collection<ConnectionEventListener> cels = new ArrayList<ConnectionEventListener>();
@@ -300,7 +300,7 @@
// because it looks too nasty to expect the connection handle
// to unlock properly in certain race conditions
// where the dissociation of the managed connection is "random".
- lock = new ReentrantLock();
+ lock = new ReentrantLock(true);
}
/**
@@ -340,7 +340,8 @@
*/
protected void unlock()
{
- lock.unlock();
+ if (lock.isHeldByCurrentThread())
+ lock.unlock();
}
/**
Modified: projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/WrappedConnection.java
===================================================================
--- projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/WrappedConnection.java 2010-12-21 09:51:09 UTC (rev 110062)
+++ projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/WrappedConnection.java 2010-12-21 09:59:01 UTC (rev 110063)
@@ -49,7 +49,9 @@
{
private static Logger log = Logger.getLogger(WrappedConnection.class);
- private BaseWrapperManagedConnection mc;
+ private volatile BaseWrapperManagedConnection mc;
+ private BaseWrapperManagedConnection lockedMC;
+ private int lockCount;
private WrapperDataSource dataSource;
@@ -90,6 +92,10 @@
if (mc != null)
{
mc.tryLock();
+ if (lockedMC == null)
+ lockedMC = mc;
+
+ lockCount++ ;
}
else
{
@@ -102,12 +108,12 @@
*/
protected void unlock()
{
- BaseWrapperManagedConnection mc = this.mc;
+ BaseWrapperManagedConnection mc = this.lockedMC;
+ if (--lockCount == 0)
+ lockedMC = null;
+
if (mc != null)
mc.unlock();
-
- // We recreate the lock when returned to the pool
- // so missing the unlock after disassociation is not important
}
/**
More information about the jboss-cvs-commits
mailing list