From 9fa649312a8bed06d4cbfad05ff815e2112d703e Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sat, 8 Mar 2014 14:29:09 -0800 Subject: [PATCH] Fixed #398 - Concurrent modification during grid reconstruction --- .../resonantinduction/core/grid/NodeGrid.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/resonantinduction/core/grid/NodeGrid.java b/src/main/java/resonantinduction/core/grid/NodeGrid.java index 43028c69..00e250f3 100644 --- a/src/main/java/resonantinduction/core/grid/NodeGrid.java +++ b/src/main/java/resonantinduction/core/grid/NodeGrid.java @@ -21,21 +21,24 @@ public abstract class NodeGrid extends Grid AbstractMap connections = node.getConnections(); - for (Object connection : connections.keySet()) + synchronized (connections) { - if (isValidNode(connection) && connection instanceof Node) + for (Object connection : connections.keySet()) { - Node connectedNode = (Node) connection; - - if (connectedNode.getGrid() != this) + if (isValidNode(connection) && connection instanceof Node) { - synchronized (connectedNode.getGrid().getNodes()) + Node connectedNode = (Node) connection; + + if (connectedNode.getGrid() != this) { - connectedNode.getGrid().getNodes().clear(); + synchronized (connectedNode.getGrid().getNodes()) + { + connectedNode.getGrid().getNodes().clear(); + } + + add((N) connectedNode); + reconstructNode((N) connectedNode); } - - add((N) connectedNode); - reconstructNode((N) connectedNode); } } }