You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2015/08/21 14:23:27 UTC
svn commit: r1696956 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
Author: mduerig
Date: Fri Aug 21 12:23:27 2015
New Revision: 1696956
URL: http://svn.apache.org/r1696956
Log:
OAK-3264: Deadlock between persisted compaction map and cleanup 2
Move the cleanup call outside of the file store lock
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1696956&r1=1696955&r2=1696956&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Fri Aug 21 12:23:27 2015
@@ -623,10 +623,13 @@ public class FileStore implements Segmen
journalFile.writeBytes(after.toString10() + " root\n");
journalFile.getChannel().force(false);
persistedHead.set(after);
+ }
- if (cleanup) {
- cleanup();
- }
+ // Needs to happen outside the synchronization block above to
+ // prevent the flush from stopping concurrent reads and writes
+ // by the persisted compaction map. See OAK-3264
+ if (cleanup) {
+ cleanup();
}
}
synchronized (this) {