diff --git a/Spigot-Server-Patches/0307-Thread-Safe-Iteration-of-Chunk-Scheduler.patch b/Spigot-Server-Patches/0307-Thread-Safe-Iteration-of-Chunk-Scheduler.patch new file mode 100644 index 000000000..205471a46 --- /dev/null +++ b/Spigot-Server-Patches/0307-Thread-Safe-Iteration-of-Chunk-Scheduler.patch @@ -0,0 +1,47 @@ +From bdd76dbf6c7b71856f5edb1ea7cf572b76706cad Mon Sep 17 00:00:00 2001 +From: Aikar <aikar@aikar.co> +Date: Mon, 23 Jul 2018 19:13:06 -0400 +Subject: [PATCH] Thread Safe Iteration of Chunk Scheduler + + +diff --git a/src/main/java/net/minecraft/server/ChunkTaskScheduler.java b/src/main/java/net/minecraft/server/ChunkTaskScheduler.java +index 7b3068753..45f9ad372 100644 +--- a/src/main/java/net/minecraft/server/ChunkTaskScheduler.java ++++ b/src/main/java/net/minecraft/server/ChunkTaskScheduler.java +@@ -1,8 +1,10 @@ + package net.minecraft.server; + ++import com.google.common.collect.Lists; + import it.unimi.dsi.fastutil.longs.Long2ObjectMap; + import it.unimi.dsi.fastutil.longs.Long2ObjectMaps; + import java.io.IOException; ++import java.util.ArrayList; + import java.util.EnumMap; + import java.util.Map; + import java.util.function.Consumer; +@@ -79,7 +81,13 @@ public class ChunkTaskScheduler extends Scheduler<ChunkCoordIntPair, ChunkStatus + } + + public void a() { +- this.g.values().forEach((scheduler_a) -> { ++ // Paper start ++ ArrayList<Scheduler.a> list; ++ synchronized (this.g) { ++ list = Lists.newArrayList(this.g.values()); ++ } ++ list.forEach((scheduler_a) -> { ++ // Paper end + ProtoChunk protochunk = (ProtoChunk) scheduler_a.a(); + + if (protochunk.h() && protochunk.i().d() == ChunkStatus.Type.PROTOCHUNK) { +@@ -87,6 +95,7 @@ public class ChunkTaskScheduler extends Scheduler<ChunkCoordIntPair, ChunkStatus + protochunk.setLastSaved(this.c.getTime()); + this.e.saveChunk(this.c, protochunk); + protochunk.a(false); ++ + } catch (IOException ioexception) { + ChunkTaskScheduler.b.error("Couldn\'t save chunk", ioexception); + } catch (ExceptionWorldConflict exceptionworldconflict) { +-- +2.18.0 +