Skip to content

Commit 3077812

Browse files
committed
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.
1 parent 6c7ebcc commit 3077812

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

src/net.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1641,6 +1641,7 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect)
16411641
auto next_extra_block_relay = GetExponentialRand(start, EXTRA_BLOCK_RELAY_ONLY_PEER_INTERVAL);
16421642
const bool dnsseed = gArgs.GetBoolArg("-dnsseed", DEFAULT_DNSSEED);
16431643
bool add_fixed_seeds = gArgs.GetBoolArg("-fixedseeds", DEFAULT_FIXEDSEEDS);
1644+
const bool use_seednodes{gArgs.IsArgSet("-seednode")};
16441645

16451646
if (!add_fixed_seeds) {
16461647
LogPrintf("Fixed seeds are disabled\n");
@@ -1670,12 +1671,12 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect)
16701671
LogPrintf("Adding fixed seeds as 60 seconds have passed and addrman is empty for at least one reachable network\n");
16711672
}
16721673

1673-
// Checking !dnsseed is cheaper before locking 2 mutexes.
1674-
if (!add_fixed_seeds_now && !dnsseed) {
1675-
LOCK2(m_addr_fetches_mutex, m_added_nodes_mutex);
1676-
if (m_addr_fetches.empty() && m_added_nodes.empty()) {
1674+
// Perform cheap checks before locking a mutex.
1675+
else if (!dnsseed && !use_seednodes) {
1676+
LOCK(m_added_nodes_mutex);
1677+
if (m_added_nodes.empty()) {
16771678
add_fixed_seeds_now = true;
1678-
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");
1679+
LogPrintf("Adding fixed seeds as -dnsseed=0 (or IPv4/IPv6 connections are disabled via -onlynet) and neither -addnode nor -seednode are provided\n");
16791680
}
16801681
}
16811682

test/functional/feature_config_args.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ def test_seed_peers(self):
213213
with self.nodes[0].assert_debug_log(expected_msgs=[
214214
"Loaded 0 addresses from peers.dat",
215215
"DNS seeding disabled",
216-
"Adding fixed seeds as -dnsseed=0 (or IPv4/IPv6 connections are disabled via -onlynet), -addnode is not provided and all -seednode(s) attempted\n",
216+
"Adding fixed seeds as -dnsseed=0 (or IPv4/IPv6 connections are disabled via -onlynet) and neither -addnode nor -seednode are provided\n",
217217
]):
218218
self.start_node(0, extra_args=['-dnsseed=0', '-fixedseeds=1'])
219219
assert time.time() - start < 60

0 commit comments

Comments
 (0)