[jboss-cvs] JBossAS SVN: r110053 - trunk/connector/src/main/java/org/jboss/resource/adapter/jdbc.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Dec 20 15:23:49 EST 2010


Author: weston.price at jboss.com
Date: 2010-12-20 15:23:49 -0500 (Mon, 20 Dec 2010)
New Revision: 110053

Modified:
   trunk/connector/src/main/java/org/jboss/resource/adapter/jdbc/WrappedConnection.java
Log:
[JBPAPP-5596] Fixed issue with JCA deadlock. Fix provided by Kevin Conner. 

Modified: trunk/connector/src/main/java/org/jboss/resource/adapter/jdbc/WrappedConnection.java
===================================================================
--- trunk/connector/src/main/java/org/jboss/resource/adapter/jdbc/WrappedConnection.java	2010-12-20 20:22:10 UTC (rev 110052)
+++ trunk/connector/src/main/java/org/jboss/resource/adapter/jdbc/WrappedConnection.java	2010-12-20 20:23:49 UTC (rev 110053)
@@ -49,7 +49,9 @@
 {
    private static final Logger log = Logger.getLogger(WrappedConnection.class);
 
-   private BaseWrapperManagedConnection mc;
+   private volatile BaseWrapperManagedConnection mc;
+   private BaseWrapperManagedConnection lockedMC;
+   private int lockCount;
 
    private WrapperDataSource dataSource;
    
@@ -77,18 +79,26 @@
    {
       BaseWrapperManagedConnection mc = this.mc;
       if (mc != null)
+      {
          mc.tryLock();
+         if (lockedMC == null)
+         {
+            lockedMC = mc ;
+         }
+         lockCount++ ;
+      }
       else
          throw new SQLException("Connection is not associated with a managed connection." + this);
    }
 
    protected void unlock()
    {
-      BaseWrapperManagedConnection mc = this.mc;
-      if (mc != null)
-         mc.unlock();
-      // We recreate the lock when returned to the pool
-      // so missing the unlock after disassociation is not important
+      BaseWrapperManagedConnection mc = lockedMC;
+      if (--lockCount == 0)
+      {
+         lockedMC = null;
+      }
+      mc.unlock();
    }
 
    public WrapperDataSource getDataSource()



More information about the jboss-cvs-commits mailing list