From c686745c8191a6a807836c9bcf1e98b84c59170f Mon Sep 17 00:00:00 2001 From: Ravin Perera <33562092+ravinsp@users.noreply.github.com> Date: Sat, 28 Aug 2021 21:22:18 +0530 Subject: [PATCH] Fixed long lived known remotes mutex lock. (#346) --- src/p2p/peer_comm_server.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/p2p/peer_comm_server.cpp b/src/p2p/peer_comm_server.cpp index c1b8eef9..15d6bbd7 100644 --- a/src/p2p/peer_comm_server.cpp +++ b/src/p2p/peer_comm_server.cpp @@ -121,9 +121,15 @@ namespace p2p // Update global known remote count when new connections are made. known_remote_count = known_remotes.size(); - std::scoped_lock lock(req_known_remotes_mutex); + // We copy the required known peer list to a local list within a mutex. + // This avoids the need for a long-lived mutex lock while all connections are attempted. + std::vector peer_check_list; + { + std::scoped_lock lock(req_known_remotes_mutex); + peer_check_list = req_known_remotes; + } - for (const auto &peer : req_known_remotes) + for (const auto &peer : peer_check_list) { if (is_shutting_down) break;