[jboss-cvs] JBossAS SVN: r110050 - branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/adapter/jdbc.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Dec 20 13:55:02 EST 2010


Author: weston.price at jboss.com
Date: 2010-12-20 13:55:02 -0500 (Mon, 20 Dec 2010)
New Revision: 110050

Modified:
   branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/adapter/jdbc/WrappedConnection.java
Log:
[JBPAPP-5596] Fixed issue for JCA deadlock in WrappedConnection. Applied patch provided in JIRA task submitted by Kevin Connor to

Modified: branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/adapter/jdbc/WrappedConnection.java
===================================================================
--- branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/adapter/jdbc/WrappedConnection.java	2010-12-20 17:47:47 UTC (rev 110049)
+++ branches/JBPAPP_5_1/connector/src/main/org/jboss/resource/adapter/jdbc/WrappedConnection.java	2010-12-20 18:55:02 UTC (rev 110050)
@@ -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