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 2016/08/03 05:02:50 UTC
svn commit: r1755017 -
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java
Author: ckoell
Date: Wed Aug 3 05:02:50 2016
New Revision: 1755017
URL: http://svn.apache.org/viewvc?rev=1755017&view=rev
Log:
JCR-3999 Possibility for a Deadlock in FineGrainedISMLocking in a XA Environment
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java?rev=1755017&r1=1755016&r2=1755017&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/FineGrainedISMLocking.java Wed Aug 3 05:02:50 2016
@@ -134,15 +134,21 @@ public class FineGrainedISMLocking imple
// we want to become the current writer
Sync exclusive = writerStateRWLock.writeLock();
exclusive.acquire();
+ Object currentId = getCurrentThreadId();
try {
if (activeWriter == null
&& !readLockMap.hasDependency(changeLog)) {
activeWriter = new WriteLockImpl(changeLog);
- activeWriterId = getCurrentThreadId();
+ activeWriterId = currentId;
return activeWriter;
} else {
- signal = new Latch();
- waitingWriters.add(signal);
+ if (isSameThreadId(activeWriterId, currentId)
+ && !readLockMap.hasDependency(changeLog)) {
+ return activeWriter;
+ } else {
+ signal = new Latch();
+ waitingWriters.add(signal);
+ }
}
} finally {
exclusive.release();