From 2b4281ee535eae8f110f73030787f533b95c2676 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Tue, 8 Jan 2019 11:06:36 +0200 Subject: [PATCH] Fixed ConfigNode#remove ConcurrentModificationException --- .../plan/system/settings/config/ConfigNode.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/ConfigNode.java b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/ConfigNode.java index c03a77a72..73f9c4afc 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/ConfigNode.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/ConfigNode.java @@ -126,11 +126,12 @@ public class ConfigNode { parent.nodeOrder.remove(key); updateParent(null); - for (String key : nodeOrder) { - ConfigNode child = childNodes.get(key); - if (child != null) child.remove(); - } - + // Remove children recursively to avoid memory leaks + nodeOrder.stream() + .sorted() // will use internal state and prevent Concurrent modification of underlying list + .map(childNodes::get) + .filter(Objects::nonNull) + .forEach(ConfigNode::remove); } /**