diff --git a/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java b/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java index 81b29ad..7490d15 100644 --- a/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java +++ b/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java @@ -205,9 +205,11 @@ class TcpConnectionManager implements PeerListener { * @param reason motivo do encerramento informado aos peers. */ public void closeAllConnections(String reason) { - for (List connections : privateConnections.values()) { - for (TcpConnection connection : connections) { - InfoMessage.sendSystemInfo(connection, InfoType.CONNECTION_CLOSED, reason); + synchronized (privateConnections) { + for (List connections : new ArrayList<>(privateConnections.values())) { + for (TcpConnection connection : new ArrayList<>(connections)) { + InfoMessage.sendSystemInfo(connection, InfoType.CONNECTION_CLOSED, reason); + } } } closeAllConnections(); @@ -221,18 +223,19 @@ class TcpConnectionManager implements PeerListener { */ public void closeAllConnections() { - for (TcpConnection connection : publicConnections.values()) { + for (TcpConnection connection : new ArrayList<>(publicConnections.values())) { closeConnection(connection); } synchronized (privateConnections) { - for (List connectionsList : privateConnections.values()) { - for (TcpConnection connection : connectionsList) { + for (List connectionsList : new ArrayList<>(privateConnections.values())) { + for (TcpConnection connection : new ArrayList<>(connectionsList)) { closeConnection(connection); } - privateConnections.clear(); } + privateConnections.clear(); } + publicConnections.clear(); } /**