From 8d49a09e2b0c5116bda918a7777d8bb57b49560c Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Wed, 18 May 2016 19:53:18 +0200 Subject: [PATCH] to avoid persistent hash map corruption sync stream on closing file handle used for output --- .../intellij/util/io/PersistentHashMapValueStorage.java | 1 + .../io/RandomAccessFileWithLengthAndSizeTracking.java | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/platform/util/src/com/intellij/util/io/PersistentHashMapValueStorage.java b/platform/util/src/com/intellij/util/io/PersistentHashMapValueStorage.java index dbe734157d99..91dc06f12378 100644 --- a/platform/util/src/com/intellij/util/io/PersistentHashMapValueStorage.java +++ b/platform/util/src/com/intellij/util/io/PersistentHashMapValueStorage.java @@ -76,6 +76,7 @@ public class PersistentHashMapValueStorage { @Override protected void disposeAccessor(DataOutputStream fileAccessor) throws IOException { + if (!useSingleFileDescriptor) IOUtil.syncStream(fileAccessor); fileAccessor.close(); } }; diff --git a/platform/util/src/com/intellij/util/io/RandomAccessFileWithLengthAndSizeTracking.java b/platform/util/src/com/intellij/util/io/RandomAccessFileWithLengthAndSizeTracking.java index ef340d7f54f2..c6fecfa1c4cc 100644 --- a/platform/util/src/com/intellij/util/io/RandomAccessFileWithLengthAndSizeTracking.java +++ b/platform/util/src/com/intellij/util/io/RandomAccessFileWithLengthAndSizeTracking.java @@ -178,6 +178,7 @@ class RandomAccessFileWithLengthAndSizeTracking extends RandomAccessFile { if (LOG.isTraceEnabled()) { LOG.trace("Closed:" + this + "," + Thread.currentThread() ); } + force(); super.close(); } @@ -185,4 +186,12 @@ class RandomAccessFileWithLengthAndSizeTracking extends RandomAccessFile { public String toString() { return myPath + "@" + Integer.toHexString(hashCode()); } + + public void force() throws IOException { + if (LOG.isTraceEnabled()) { + LOG.trace("Forcing:" + this + "," + Thread.currentThread() ); + } + + getFD().sync(); + } }