From 90c6457d37841c26ee48c9d6958f8b7b08f3c394 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sun, 25 May 2025 14:00:07 +0200 Subject: [PATCH] write to plates to a temp file first and then move it into the mantle dir --- .../com/volmit/iris/util/mantle/TectonicPlate.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java b/core/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java index 7c59d856a..e635d4649 100644 --- a/core/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java +++ b/core/src/main/java/com/volmit/iris/util/mantle/TectonicPlate.java @@ -217,15 +217,13 @@ public class TectonicPlate { */ public void write(File file) throws IOException { PrecisionStopwatch p = PrecisionStopwatch.start(); - try (FileChannel fc = FileChannel.open(file.toPath(), StandardOpenOption.READ, StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.SYNC)) { - fc.lock(); - - OutputStream fos = Channels.newOutputStream(fc); - try (DataOutputStream dos = new DataOutputStream(new LZ4BlockOutputStream(fos))) { - write(dos); - Iris.debug("Saved Tectonic Plate " + C.DARK_GREEN + file.getName().split("\\Q.\\E")[0] + C.RED + " in " + Form.duration(p.getMilliseconds(), 2)); - } + File temp = File.createTempFile("iris-tectonic-plate", ".bin"); + try (DataOutputStream dos = new DataOutputStream(new LZ4BlockOutputStream(new FileOutputStream(temp)))) { + write(dos); } + Files.move(temp.toPath(), file.toPath(), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE); + Iris.debug("Saved Tectonic Plate " + C.DARK_GREEN + file.getName().split("\\Q.\\E")[0] + C.RED + " in " + Form.duration(p.getMilliseconds(), 2)); + temp.delete(); } /**