From 7f81531c3ecfb3c92224a0d82bb2bb23728db7eb Mon Sep 17 00:00:00 2001 From: mliem2k Date: Thu, 16 Jul 2026 10:06:35 +0800 Subject: [PATCH] Fix missing volatile on ShreddedPaperConfiguration.instance ShreddedPaperConfiguration.get() is read from every region-tick-pool thread, but set() is called from whatever thread runs /reload (not a region-tick thread). Without volatile there is no happens-before edge between a reload and later reads on other threads, so per the JMM a tick thread is free to keep observing the pre-reload config object indefinitely after /reload flips a setting. --- .../shreddedpaper/config/ShreddedPaperConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shreddedpaper-server/src/main/java/io/multipaper/shreddedpaper/config/ShreddedPaperConfiguration.java b/shreddedpaper-server/src/main/java/io/multipaper/shreddedpaper/config/ShreddedPaperConfiguration.java index 6800bc57..177eb631 100644 --- a/shreddedpaper-server/src/main/java/io/multipaper/shreddedpaper/config/ShreddedPaperConfiguration.java +++ b/shreddedpaper-server/src/main/java/io/multipaper/shreddedpaper/config/ShreddedPaperConfiguration.java @@ -15,7 +15,7 @@ public class ShreddedPaperConfiguration extends ConfigurationPart { Docs: https://github.com/MultiPaper/ShreddedPaper/blob/main/SHREDDEDPAPER_YAML.md\s """; - private static ShreddedPaperConfiguration instance; + private static volatile ShreddedPaperConfiguration instance; public static ShreddedPaperConfiguration get() { return instance;