aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0896-Fix-race-condition-on-UpgradeData.BlockFixers-class-.patch
diff options
context:
space:
mode:
authorNassim Jahnke <[email protected]>2024-06-14 14:11:52 +0200
committerNassim Jahnke <[email protected]>2024-06-14 14:11:52 +0200
commit0d3ce2d704f295b0e48795ea8145134bed9f4cb1 (patch)
treea2b93e2e167d2119feff6fe62007580ac662fd59 /patches/server/0896-Fix-race-condition-on-UpgradeData.BlockFixers-class-.patch
parent3c04f9f668c3a42cb294c5e55a846793894312e5 (diff)
downloadPaper-0d3ce2d704f295b0e48795ea8145134bed9f4cb1.tar.gz
Paper-0d3ce2d704f295b0e48795ea8145134bed9f4cb1.zip
Fix more compile issues
Diffstat (limited to 'patches/server/0896-Fix-race-condition-on-UpgradeData.BlockFixers-class-.patch')
-rw-r--r--patches/server/0896-Fix-race-condition-on-UpgradeData.BlockFixers-class-.patch27
1 files changed, 27 insertions, 0 deletions
diff --git a/patches/server/0896-Fix-race-condition-on-UpgradeData.BlockFixers-class-.patch b/patches/server/0896-Fix-race-condition-on-UpgradeData.BlockFixers-class-.patch
new file mode 100644
index 0000000000..e1f2934daa
--- /dev/null
+++ b/patches/server/0896-Fix-race-condition-on-UpgradeData.BlockFixers-class-.patch
@@ -0,0 +1,27 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Spottedleaf <[email protected]>
+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 22b6d0851a51da180cd8fbbe6554c5370f5ac5bd..cd9b65f278a750a0177a3252271015d43172b2e9 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));
+ }
+