From 45cc1dd2c7ada0d2bc291105b83f06a518ad5e1b Mon Sep 17 00:00:00 2001 From: themode Date: Sun, 27 Sep 2020 19:04:08 +0200 Subject: [PATCH] Made InstanceManager#unregisterInstance thread-safe --- .../server/instance/InstanceManager.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/minestom/server/instance/InstanceManager.java b/src/main/java/net/minestom/server/instance/InstanceManager.java index 61a881057..57cfcb68a 100644 --- a/src/main/java/net/minestom/server/instance/InstanceManager.java +++ b/src/main/java/net/minestom/server/instance/InstanceManager.java @@ -111,15 +111,17 @@ public final class InstanceManager { public void unregisterInstance(Instance instance) { Check.stateCondition(!instance.getPlayers().isEmpty(), "You cannot unregister an instance with players"); - // Unload all chunks - if (instance instanceof InstanceContainer) { - InstanceContainer instanceContainer = (InstanceContainer) instance; - instanceContainer.scheduledChunksToRemove.addAll(instanceContainer.getChunks()); - instanceContainer.UNSAFE_unloadChunks(); - } + synchronized (instance) { + // Unload all chunks + if (instance instanceof InstanceContainer) { + InstanceContainer instanceContainer = (InstanceContainer) instance; + instanceContainer.scheduledChunksToRemove.addAll(instanceContainer.getChunks()); + instanceContainer.UNSAFE_unloadChunks(); + } - instance.setRegistered(false); - this.instances.remove(instance); + instance.setRegistered(false); + this.instances.remove(instance); + } } /**