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) {