You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ck...@apache.org on 2010/03/16 08:30:26 UTC
svn commit: r923597 -
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/DefaultISMLocking.java
Author: ckoell
Date: Tue Mar 16 07:30:26 2010
New Revision: 923597
URL: http://svn.apache.org/viewvc?rev=923597&view=rev
Log:
JCR-2554 Deadlock inside XASession on Weblogic (Writer Preference)
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/DefaultISMLocking.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/DefaultISMLocking.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/DefaultISMLocking.java?rev=923597&r1=923596&r2=923597&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/DefaultISMLocking.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/DefaultISMLocking.java Tue Mar 16 07:30:26 2010
@@ -36,8 +36,9 @@ public class DefaultISMLocking implement
/**
* The internal read-write lock.
+ * Thread concerning ReentrantWriterPreferenceReadWriteLock
*/
- private final ReadWriteLock rwLock = new RWLock();
+ private final ReadWriteLock rwLock = new ReentrantWriterPreferenceReadWriteLock();
/**
* The internal Xid aware read-write lock.
@@ -110,20 +111,6 @@ public class DefaultISMLocking implement
}
/**
- * Thread concerning ReentrantWriterPreferenceReadWriteLock
- */
- private static final class RWLock extends ReentrantWriterPreferenceReadWriteLock {
-
- /**
- * Allow reader when there is no active writer, or current thread owns
- * the write lock (reentrant).
- */
- protected boolean allowReader() {
- return activeWriter_ == null || activeWriter_ == Thread.currentThread();
- }
- }
-
- /**
* Xid concerning ReentrantWriterPreferenceReadWriteLock
*/
private static final class XidRWLock extends ReentrantWriterPreferenceReadWriteLock {
@@ -145,7 +132,7 @@ public class DefaultISMLocking implement
*/
protected boolean allowReader() {
Xid currentXid = TransactionContext.getCurrentXid();
- return activeXid == null || isSameGlobalTx(currentXid);
+ return (activeXid == null && waitingWriters_ == 0) || isSameGlobalTx(currentXid);
}
/**