From ef33245f4923ca5b645481e1e861cf0cc80d4e79 Mon Sep 17 00:00:00 2001 From: Gabriel Felipe Souza Santos Date: Tue, 27 Oct 2026 19:29:05 -0300 Subject: [PATCH] =?UTF-8?q?fix(tcp):=20evitar=20ConcurrentModificationExce?= =?UTF-8?q?ption=20ao=20fechar=20todas=20as=20conex=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Itera cópias das listas de conexões públicas/privadas antes de remover no shutdown. Co-authored-by: Cursor --- .../pitiupi/net/tcp/TcpConnectionManager.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) 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(); } /**