From 14998c2f0a87d1c1e3a09e23324e9dfb834f184f Mon Sep 17 00:00:00 2001 From: leniver <22509728+leniver@users.noreply.github.com> Date: Fri, 4 Sep 2026 15:07:11 +0200 Subject: [PATCH] Fix ConcurrentModificationException in View draw loops View#drawSelf, #drawHidden and #drawSelfLast iterated the live children list. A structural change to that list during a render pass crashed the client with ConcurrentModificationException. View#onUpdate already guarded against this by iterating a copy; apply the same treatment to the three draw paths. Fixes #129 --- src/main/java/com/ldtteam/blockui/views/View.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/ldtteam/blockui/views/View.java b/src/main/java/com/ldtteam/blockui/views/View.java index 59ba405a..eb00afee 100644 --- a/src/main/java/com/ldtteam/blockui/views/View.java +++ b/src/main/java/com/ldtteam/blockui/views/View.java @@ -83,7 +83,7 @@ public void drawSelf(final BOGuiGraphics target, final double mx, final double m final double drawX = mx - paddedX; final double drawY = my - paddedY; - for (final Pane child : children) + for (final Pane child : new ArrayList<>(children)) { if (childIsVisible(child)) { @@ -101,7 +101,7 @@ public void drawSelf(final BOGuiGraphics target, final double mx, final double m @Override public void drawHidden() { - for (final Pane child : children) + for (final Pane child : new ArrayList<>(children)) { child.drawHidden(); } @@ -124,7 +124,7 @@ public void drawSelfLast(final BOGuiGraphics target, final double mx, final doub final double drawX = mx - paddedX; final double drawY = my - paddedY; - for (final Pane child : children) + for (final Pane child : new ArrayList<>(children)) { if (childIsVisible(child)) {