From daad0093e3d1466789d0ce687902636c80cd74a1 Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Wed, 9 Feb 2022 14:01:32 +0100 Subject: [PATCH 1/2] validation: replace lock with annotation in UnloadBlockIndex() --- src/test/util/setup_common.cpp | 2 +- src/validation.cpp | 2 +- src/validation.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp index c968e4d1244..bb3c88f627c 100644 --- a/src/test/util/setup_common.cpp +++ b/src/test/util/setup_common.cpp @@ -180,7 +180,7 @@ ChainTestingSetup::~ChainTestingSetup() m_node.banman.reset(); m_node.addrman.reset(); m_node.args = nullptr; - UnloadBlockIndex(m_node.mempool.get(), *m_node.chainman); + WITH_LOCK(::cs_main, UnloadBlockIndex(m_node.mempool.get(), *m_node.chainman)); m_node.mempool.reset(); m_node.scheduler.reset(); m_node.chainman->Reset(); diff --git a/src/validation.cpp b/src/validation.cpp index e20e2fe5236..438e375988b 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -4028,7 +4028,7 @@ void CChainState::UnloadBlockIndex() { // block index state void UnloadBlockIndex(CTxMemPool* mempool, ChainstateManager& chainman) { - LOCK(cs_main); + AssertLockHeld(::cs_main); chainman.Unload(); pindexBestHeader = nullptr; if (mempool) mempool->clear(); diff --git a/src/validation.h b/src/validation.h index fdfd29d1f88..1972bf75ea9 100644 --- a/src/validation.h +++ b/src/validation.h @@ -138,7 +138,7 @@ extern CBlockIndex *pindexBestHeader; extern const std::vector CHECKLEVEL_DOC; /** Unload database information */ -void UnloadBlockIndex(CTxMemPool* mempool, ChainstateManager& chainman); +void UnloadBlockIndex(CTxMemPool* mempool, ChainstateManager& chainman) EXCLUSIVE_LOCKS_REQUIRED(::cs_main); /** Run instances of script checking worker threads */ void StartScriptCheckWorkerThreads(int threads_num); /** Stop all of the script checking worker threads */ From ae9ceed3e23288b163b7d7b1840b06b8d332f4ce Mon Sep 17 00:00:00 2001 From: Jon Atack Date: Tue, 8 Feb 2022 20:56:14 +0100 Subject: [PATCH 2/2] validation, refactoring: remove ChainstateManager::Reset() Co-authored-by: Vasil Dimov Co-authored-by: laanwj <126646+laanwj@users.noreply.github.com> --- src/test/util/setup_common.cpp | 1 - src/validation.cpp | 9 --------- src/validation.h | 6 +----- 3 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp index bb3c88f627c..211153f06cf 100644 --- a/src/test/util/setup_common.cpp +++ b/src/test/util/setup_common.cpp @@ -183,7 +183,6 @@ ChainTestingSetup::~ChainTestingSetup() WITH_LOCK(::cs_main, UnloadBlockIndex(m_node.mempool.get(), *m_node.chainman)); m_node.mempool.reset(); m_node.scheduler.reset(); - m_node.chainman->Reset(); m_node.chainman.reset(); } diff --git a/src/validation.cpp b/src/validation.cpp index 438e375988b..dd34a19a3ef 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -5009,15 +5009,6 @@ void ChainstateManager::Unload() m_best_invalid = nullptr; } -void ChainstateManager::Reset() -{ - LOCK(::cs_main); - m_ibd_chainstate.reset(); - m_snapshot_chainstate.reset(); - m_active_chainstate = nullptr; - m_snapshot_validated = false; -} - void ChainstateManager::MaybeRebalanceCaches() { if (m_ibd_chainstate && !m_snapshot_chainstate) { diff --git a/src/validation.h b/src/validation.h index 1972bf75ea9..bc58fc60d1a 100644 --- a/src/validation.h +++ b/src/validation.h @@ -985,17 +985,13 @@ public: //! Unload block index and chain data before shutdown. void Unload() EXCLUSIVE_LOCKS_REQUIRED(::cs_main); - //! Clear (deconstruct) chainstate data. - void Reset(); - //! Check to see if caches are out of balance and if so, call //! ResizeCoinsCaches() as needed. void MaybeRebalanceCaches() EXCLUSIVE_LOCKS_REQUIRED(::cs_main); ~ChainstateManager() { LOCK(::cs_main); - UnloadBlockIndex(/* mempool */ nullptr, *this); - Reset(); + UnloadBlockIndex(/*mempool=*/nullptr, *this); } };