From 225e2a9fb805a437a3b8a3bcd04787eb07bb5014 Mon Sep 17 00:00:00 2001 From: rtm516 Date: Fri, 10 Jul 2020 15:43:30 +0100 Subject: [PATCH] Make a copy of the players list when disconnecting them all on shutdown (#928) --- .../main/java/org/geysermc/connector/GeyserConnector.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java index 435c1eaa..89eccda5 100644 --- a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java +++ b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java @@ -61,6 +61,7 @@ import org.geysermc.connector.utils.LocaleUtils; import java.net.InetSocketAddress; import java.text.DecimalFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executors; @@ -189,7 +190,9 @@ public class GeyserConnector { if (players.size() >= 1) { bootstrap.getGeyserLogger().info(LanguageUtils.getLocaleStringLog("geyser.core.shutdown.kick.log", players.size())); - for (GeyserSession playerSession : players) { + // Make a copy to prevent ConcurrentModificationException + final List tmpPlayers = new ArrayList<>(players); + for (GeyserSession playerSession : tmpPlayers) { playerSession.disconnect(LanguageUtils.getPlayerLocaleString("geyser.core.shutdown.kick.message", playerSession.getClientData().getLanguageCode())); }