[jboss-cvs] JBossAS SVN: r110206 - in branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter: jms and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Dec 23 17:35:29 EST 2010
Author: jbertram at redhat.com
Date: 2010-12-23 17:35:29 -0500 (Thu, 23 Dec 2010)
New Revision: 110206
Modified:
branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jdbc/BaseWrapperManagedConnection.java
branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jdbc/WrappedConnection.java
branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java
branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jms/JmsSession.java
Log:
JBPAPP-5698
Modified: branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jdbc/BaseWrapperManagedConnection.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jdbc/BaseWrapperManagedConnection.java 2010-12-23 22:10:13 UTC (rev 110205)
+++ branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jdbc/BaseWrapperManagedConnection.java 2010-12-23 22:35:29 UTC (rev 110206)
@@ -68,7 +68,7 @@
private final int transactionIsolation;
private final boolean readOnly;
- private ReentrantLock lock = new ReentrantLock();
+ private ReentrantLock lock = new ReentrantLock(true);
private final Collection cels = new ArrayList();
private final Set handles = new HashSet();
@@ -202,7 +202,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);
}
}
@@ -276,7 +276,8 @@
protected void unlock()
{
- lock.unlock();
+ if (lock.isHeldByCurrentThread())
+ lock.unlock();
}
void closeHandle(WrappedConnection handle)
Modified: branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jdbc/WrappedConnection.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jdbc/WrappedConnection.java 2010-12-23 22:10:13 UTC (rev 110205)
+++ branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jdbc/WrappedConnection.java 2010-12-23 22:35:29 UTC (rev 110206)
@@ -50,7 +50,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;
@@ -78,18 +80,25 @@
{
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;
+ 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
}
public WrapperDataSource getDataSource()
Modified: branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java 2010-12-23 22:10:13 UTC (rev 110205)
+++ branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jms/JmsManagedConnection.java 2010-12-23 22:35:29 UTC (rev 110206)
@@ -144,7 +144,7 @@
private String pwd;
private boolean isDestroyed;
- private ReentrantLock lock = new ReentrantLock();
+ private ReentrantLock lock = new ReentrantLock(true);
// Physical JMS connection stuff
private Connection con;
@@ -358,7 +358,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);
}
@@ -414,7 +414,8 @@
protected void unlock()
{
- lock.unlock();
+ if (lock.isHeldByCurrentThread())
+ lock.unlock();
}
/**
Modified: branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jms/JmsSession.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jms/JmsSession.java 2010-12-23 22:10:13 UTC (rev 110205)
+++ branches/JBPAPP_4_2_0_GA_CP06_JBPAPP-5698/connector/src/main/org/jboss/resource/adapter/jms/JmsSession.java 2010-12-23 22:35:29 UTC (rev 110206)
@@ -67,7 +67,9 @@
private static final Logger log = Logger.getLogger(JmsSession.class);
/** The managed connection for this session. */
- private JmsManagedConnection mc; // = null;
+ private volatile JmsManagedConnection mc;
+ private JmsManagedConnection lockedMC;
+ private int lockCount;
/** The connection request info */
private JmsConnectionRequestInfo info;
@@ -106,7 +108,14 @@
{
JmsManagedConnection mc = this.mc;
if (mc != null)
+ {
mc.tryLock();
+
+ if (lockedMC == null)
+ lockedMC = mc;
+
+ lockCount++;
+ }
else
throw new IllegalStateException("Connection is not associated with a managed connection. " + this);
}
@@ -114,10 +123,11 @@
protected void unlock()
{
JmsManagedConnection mc = this.mc;
+ 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