2023-09-24 07:15:09 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
|
|
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
|
2023-12-06 19:18:53 +01:00
|
|
|
index 0f94af3502ef517c33d04841a80ea2ace077f0af..f9c1012216928b16feb14f0bf78fb328a443a7ee 100644
|
2023-09-24 07:15:09 +02:00
|
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/UpgradeData.java
|
2023-12-06 19:18:53 +01:00
|
|
|
@@ -138,6 +138,7 @@ public class UpgradeData {
|
2023-09-24 07:15:09 +02:00
|
|
|
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);
|
|
|
|
});
|