From 02e411ec456af80d1da76085a814c68bb3aca6de Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Sat, 19 Jun 2021 17:19:38 +0200 Subject: p2p: iterate eviction protection only on networks having candidates in ProtectEvictionCandidatesByRatio(). Thank you to Vasil Dimov, whose suggestions during a post-merge discussion about PR 21261 reminded me that I had done this in earlier versions of the PR, e.g. commits like ef411cd2. Co-authored-by: Vasil Dimov --- src/net.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/net.cpp b/src/net.cpp index 60059249ed..1611b1a24b 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -935,7 +935,10 @@ void ProtectEvictionCandidatesByRatio(std::vector& evicti const size_t max_protect_by_network{total_protect_size / 2}; size_t num_protected{0}; - while (num_protected < max_protect_by_network) { + // Count the number of disadvantaged networks from which we have peers to protect. + auto num_networks = std::count_if(networks.begin(), networks.end(), [](const Net& n) { return n.count; }); + + while (num_networks != 0 && num_protected < max_protect_by_network) { const size_t disadvantaged_to_protect{max_protect_by_network - num_protected}; const size_t protect_per_network{ std::max(disadvantaged_to_protect / networks.size(), static_cast(1))}; -- cgit v1.2.3