From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Tue, 8 Aug 2023 17:29:33 -0700 Subject: [PATCH] Fix race condition on UpgradeData.BlockFixers class init The CHUNKY_FIXERS field is modified during the constructors of the BlockFixers, but the code that uses CHUNKY_FIXERS does not properly ensure that BlockFixers has been initialised before using it, leading to a possible race condition where instances of BlockFixers are accessed before they have initialised correctly. We can force the class to initialise fully before accessing the field by calling any method on the class, and for convenience we use values(). diff --git a/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java b/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java index 25c1abaeb916781f810d580a4d388d4d3adad75a..932c9ba8d9ef82746cac0c40292a8e41ffb4ea33 100644 --- a/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java +++ b/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java @@ -140,6 +140,7 @@ public class UpgradeData { Fluid fluid = tick.type() == Fluids.EMPTY ? level.getFluidState(tick.pos()).getType() : tick.type(); level.scheduleTick(tick.pos(), fluid, tick.delay(), tick.priority()); }); + UpgradeData.BlockFixers.values(); // Paper - force the class init so that we don't access CHUNKY_FIXERS before all BlockFixers are initialised CHUNKY_FIXERS.forEach(logic -> logic.processChunk(level)); }