geforkt von Mirrors/Paper
07548192b1
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: cc7edd6bc SPIGOT-7051: Worldgen API does not run vanilla noise generation when shouldGenerateNoise is true
49 Zeilen
2.3 KiB
Diff
49 Zeilen
2.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <spottedleaf@spottedleaf.dev>
|
|
Date: Fri, 24 Apr 2020 09:06:15 -0700
|
|
Subject: [PATCH] Make CallbackExecutor strict again
|
|
|
|
The correct fix for double scheduling is to avoid it. The reason
|
|
this class is used is because double scheduling causes issues
|
|
elsewhere, and it acts as an explicit detector of what double
|
|
schedules. Effectively, use the callback executor as a tool of
|
|
finding issues rather than hiding these issues.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
index 82ebf79bdcae552d6e4f5dc4b4c85da26eda356c..c0f0f952c5dcd43435e6deae0566757ed6290e80 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
@@ -168,17 +168,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
|
public final CallbackExecutor callbackExecutor = new CallbackExecutor();
|
|
public static final class CallbackExecutor implements java.util.concurrent.Executor, Runnable {
|
|
|
|
- private final java.util.Queue<Runnable> queue = new java.util.ArrayDeque<>();
|
|
+ private Runnable queued; // Paper - revert CB changes
|
|
|
|
@Override
|
|
public void execute(Runnable runnable) {
|
|
- this.queue.add(runnable);
|
|
+ // Paper start - revert CB changes
|
|
+ org.spigotmc.AsyncCatcher.catchOp("Callback Executor execute");
|
|
+ if (this.queued != null) {
|
|
+ LOGGER.error("Failed to schedule runnable", new IllegalStateException("Already queued"));
|
|
+ throw new IllegalStateException("Already queued");
|
|
+ }
|
|
+ this.queued = runnable;
|
|
+ // Paper end - revert CB changes
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
- Runnable task;
|
|
- while ((task = this.queue.poll()) != null) {
|
|
+ // Paper start - revert CB changes
|
|
+ org.spigotmc.AsyncCatcher.catchOp("Callback Executor execute");
|
|
+ Runnable task = this.queued;
|
|
+ if (task != null) {
|
|
+ this.queued = null;
|
|
+ // Paper end - revert CB changes
|
|
task.run();
|
|
}
|
|
}
|