From b67dbf0cb9243246ff9c462c60d543601f974ca7 Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 13 Mar 2020 19:47:26 -0700 Subject: [PATCH] More robust method to unload classes. In some situations there can be a concurrent modification error that occurs when unloading the classes. --- .../world/bentobox/bentobox/managers/AddonsManager.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/world/bentobox/bentobox/managers/AddonsManager.java b/src/main/java/world/bentobox/bentobox/managers/AddonsManager.java index 4135211a6..b1c7b5b0d 100644 --- a/src/main/java/world/bentobox/bentobox/managers/AddonsManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/AddonsManager.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -13,6 +14,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.logging.Level; @@ -475,7 +477,10 @@ public class AddonsManager { } // Clear loaders if (loaders.containsKey(addon)) { - loaders.get(addon).getClasses().forEach(classes::remove); + Set unmodifiableSet = Collections.unmodifiableSet(loaders.get(addon).getClasses()); + for (String className : unmodifiableSet) { + classes.remove(className); + } addon.setState(State.DISABLED); loaders.remove(addon); }