net: Restrict period when cs_vNodes mutex is locked

This commit is contained in:
Hennadii Stepanov
2021-04-12 14:54:58 +03:00
parent f0b457212f
commit a3d090d110
4 changed files with 5 additions and 20 deletions

View File

@@ -2636,8 +2636,9 @@ void CConnman::StopNodes()
}
// Close sockets
LOCK(cs_vNodes);
for (CNode* pnode : vNodes)
std::vector<CNode*> 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();