From ab545dc44c9d6e74cdff49b69a98864cf0a5dda9 Mon Sep 17 00:00:00 2001 From: md678685 <1917406+md678685@users.noreply.github.com> Date: Thu, 30 Jul 2020 14:22:34 +0100 Subject: [PATCH] Fix rare ConcurrentModificationException in quit handler Copies the list of viewers before iterating over it to fix a rare CME that is *sometimes* thrown. It's not clear *why* this broke - Spigot seems to have changed behaviour in late 1.15 or 1.16? --- .../src/com/earth2me/essentials/EssentialsPlayerListener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index ee7d1b47a..58e999aaf 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -212,7 +212,8 @@ public class EssentialsPlayerListener implements Listener { user.getBase().getOpenInventory().getTopInventory().clear(); } - for (HumanEntity viewer : user.getBase().getInventory().getViewers()) { + ArrayList viewers = new ArrayList<>(user.getBase().getInventory().getViewers()); + for (HumanEntity viewer : viewers) { if (viewer instanceof Player) { User uviewer = ess.getUser((Player) viewer); if (uviewer.isInvSee()) {