From 33954ccf67f11c1da61ef45b21a7541b39c0a81a Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Wed, 10 Oct 2018 16:17:16 +0200 Subject: [PATCH] Lock configuration file when writing to filesystem Use OS-wide exclusive lock when writing configuration file to filesystem to prevent config file corruption when multiple concurrent writers try to write to same config file at same time. Signed-off-by: Tomas Slusny --- .../net/runelite/client/config/ConfigManager.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index 8cb35728d0..400083b815 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -41,6 +41,7 @@ import java.io.OutputStreamWriter; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.Proxy; +import java.nio.channels.FileLock; import java.nio.charset.Charset; import java.time.Instant; import java.util.Arrays; @@ -229,7 +230,16 @@ public class ConfigManager try (FileOutputStream out = new FileOutputStream(propertiesFile)) { - properties.store(new OutputStreamWriter(out, Charset.forName("UTF-8")), "RuneLite configuration"); + final FileLock lock = out.getChannel().lock(); + + try + { + properties.store(new OutputStreamWriter(out, Charset.forName("UTF-8")), "RuneLite configuration"); + } + finally + { + lock.release(); + } } }