From e8e7392311edf44278d76743bebe902d4ac94662 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Thu, 5 Aug 2021 11:15:35 +0100 Subject: [PATCH] [addrman] Don't call Clear() if parsing peers.dat fails Now that we manage the lifespan of node.addrman, we can just reset node.addrman to a newly initialized CAddrMan if parsing peers.dat fails, eliminating the possibility that Clear() leaves some old state behind. --- src/init.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/init.cpp b/src/init.cpp index 2ca6cebee7..d741badc92 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1175,7 +1175,8 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) if (adb.Read(*node.addrman)) { LogPrintf("Loaded %i addresses from peers.dat %dms\n", node.addrman->size(), GetTimeMillis() - nStart); } else { - node.addrman->Clear(); // Addrman can be in an inconsistent state after failure, reset it + // Addrman can be in an inconsistent state after failure, reset it + node.addrman = std::make_unique(/* deterministic */ false, /* consistency_check_ratio */ check_addrman); LogPrintf("Recreating peers.dat\n"); adb.Write(*node.addrman); }