From 30778124b82791abdc6e930373460ef1dd587cb2 Mon Sep 17 00:00:00 2001 From: Martin Zumsande Date: Thu, 4 May 2023 14:59:29 -0400 Subject: [PATCH] net: Give seednodes time before falling back to fixed seeds Before, we'd remove a seednode from the list right after connecting to it, leading to a race with loading the fixed seed and connecting to them. --- src/net.cpp | 11 ++++++----- test/functional/feature_config_args.py | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 337cf60680d..ed0b2d6ac83 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1641,6 +1641,7 @@ void CConnman::ThreadOpenConnections(const std::vector connect) auto next_extra_block_relay = GetExponentialRand(start, EXTRA_BLOCK_RELAY_ONLY_PEER_INTERVAL); const bool dnsseed = gArgs.GetBoolArg("-dnsseed", DEFAULT_DNSSEED); bool add_fixed_seeds = gArgs.GetBoolArg("-fixedseeds", DEFAULT_FIXEDSEEDS); + const bool use_seednodes{gArgs.IsArgSet("-seednode")}; if (!add_fixed_seeds) { LogPrintf("Fixed seeds are disabled\n"); @@ -1670,12 +1671,12 @@ void CConnman::ThreadOpenConnections(const std::vector connect) LogPrintf("Adding fixed seeds as 60 seconds have passed and addrman is empty for at least one reachable network\n"); } - // Checking !dnsseed is cheaper before locking 2 mutexes. - if (!add_fixed_seeds_now && !dnsseed) { - LOCK2(m_addr_fetches_mutex, m_added_nodes_mutex); - if (m_addr_fetches.empty() && m_added_nodes.empty()) { + // Perform cheap checks before locking a mutex. + else if (!dnsseed && !use_seednodes) { + LOCK(m_added_nodes_mutex); + if (m_added_nodes.empty()) { add_fixed_seeds_now = true; - LogPrintf("Adding fixed seeds as -dnsseed=0 (or IPv4/IPv6 connections are disabled via -onlynet), -addnode is not provided and all -seednode(s) attempted\n"); + LogPrintf("Adding fixed seeds as -dnsseed=0 (or IPv4/IPv6 connections are disabled via -onlynet) and neither -addnode nor -seednode are provided\n"); } } diff --git a/test/functional/feature_config_args.py b/test/functional/feature_config_args.py index f9730b48c58..664f829fd39 100755 --- a/test/functional/feature_config_args.py +++ b/test/functional/feature_config_args.py @@ -213,7 +213,7 @@ class ConfArgsTest(BitcoinTestFramework): with self.nodes[0].assert_debug_log(expected_msgs=[ "Loaded 0 addresses from peers.dat", "DNS seeding disabled", - "Adding fixed seeds as -dnsseed=0 (or IPv4/IPv6 connections are disabled via -onlynet), -addnode is not provided and all -seednode(s) attempted\n", + "Adding fixed seeds as -dnsseed=0 (or IPv4/IPv6 connections are disabled via -onlynet) and neither -addnode nor -seednode are provided\n", ]): self.start_node(0, extra_args=['-dnsseed=0', '-fixedseeds=1']) assert time.time() - start < 60