From a3d090d1103cd6c25daf07afdf4e65febca6d3f7 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Mon, 12 Apr 2021 14:54:58 +0300 Subject: net: Restrict period when cs_vNodes mutex is locked --- src/net.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/net.cpp') diff --git a/src/net.cpp b/src/net.cpp index ae38acdc3c..65f8b8baec 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2636,8 +2636,9 @@ void CConnman::StopNodes() } // Close sockets - LOCK(cs_vNodes); - for (CNode* pnode : vNodes) + std::vector nodes; + WITH_LOCK(cs_vNodes, nodes.swap(vNodes)); + for (CNode* pnode : nodes) pnode->CloseSocketDisconnect(); for (ListenSocket& hListenSocket : vhListenSocket) if (hListenSocket.socket != INVALID_SOCKET) @@ -2645,13 +2646,12 @@ void CConnman::StopNodes() LogPrintf("CloseSocket(hListenSocket) failed with error %s\n", NetworkErrorString(WSAGetLastError())); // clean up some globals (to help leak detection) - for (CNode* pnode : vNodes) { + for (CNode* pnode : nodes) { DeleteNode(pnode); } for (CNode* pnode : vNodesDisconnected) { DeleteNode(pnode); } - vNodes.clear(); vNodesDisconnected.clear(); vhListenSocket.clear(); semOutbound.reset(); -- cgit v1.2.3 From 229ac1892d807a1eea5a7c24ae0fe27dc913b1bd Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Mon, 12 Apr 2021 14:54:58 +0300 Subject: net: Combine two loops into one, and update comments --- src/net.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/net.cpp') diff --git a/src/net.cpp b/src/net.cpp index 65f8b8baec..2cb95516a4 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2635,20 +2635,20 @@ void CConnman::StopNodes() } } - // Close sockets + // Delete peer connections. std::vector nodes; WITH_LOCK(cs_vNodes, nodes.swap(vNodes)); - for (CNode* pnode : nodes) + for (CNode* pnode : nodes) { pnode->CloseSocketDisconnect(); + DeleteNode(pnode); + } + + // Close listening sockets. for (ListenSocket& hListenSocket : vhListenSocket) if (hListenSocket.socket != INVALID_SOCKET) if (!CloseSocket(hListenSocket.socket)) LogPrintf("CloseSocket(hListenSocket) failed with error %s\n", NetworkErrorString(WSAGetLastError())); - // clean up some globals (to help leak detection) - for (CNode* pnode : nodes) { - DeleteNode(pnode); - } for (CNode* pnode : vNodesDisconnected) { DeleteNode(pnode); } -- cgit v1.2.3 From 8c8237a4a10feb2ac9ce46f67b5d14bf879b670f Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Thu, 22 Apr 2021 17:30:35 +0300 Subject: net, refactor: Fix style in CConnman::StopNodes --- src/net.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/net.cpp') diff --git a/src/net.cpp b/src/net.cpp index 2cb95516a4..a8e07a567d 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2644,10 +2644,13 @@ void CConnman::StopNodes() } // Close listening sockets. - for (ListenSocket& hListenSocket : vhListenSocket) - if (hListenSocket.socket != INVALID_SOCKET) - if (!CloseSocket(hListenSocket.socket)) + for (ListenSocket& hListenSocket : vhListenSocket) { + if (hListenSocket.socket != INVALID_SOCKET) { + if (!CloseSocket(hListenSocket.socket)) { LogPrintf("CloseSocket(hListenSocket) failed with error %s\n", NetworkErrorString(WSAGetLastError())); + } + } + } for (CNode* pnode : vNodesDisconnected) { DeleteNode(pnode); -- cgit v1.2.3