diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp --- a/src/test/util/setup_common.cpp +++ b/src/test/util/setup_common.cpp @@ -202,8 +202,7 @@ m_node.banman.reset(); m_node.addrman.reset(); m_node.args = nullptr; - WITH_LOCK(::cs_main, - UnloadBlockIndex(m_node.mempool.get(), *m_node.chainman)); + WITH_LOCK(::cs_main, UnloadBlockIndex(*m_node.chainman)); m_node.mempool.reset(); m_node.scheduler.reset(); m_node.chainman.reset(); diff --git a/src/validation.h b/src/validation.h --- a/src/validation.h +++ b/src/validation.h @@ -189,7 +189,7 @@ /** * Unload database information. */ -void UnloadBlockIndex(CTxMemPool *mempool, ChainstateManager &chainman) +void UnloadBlockIndex(ChainstateManager &chainman) EXCLUSIVE_LOCKS_REQUIRED(::cs_main); /** @@ -1276,10 +1276,7 @@ //! ResizeCoinsCaches() as needed. void MaybeRebalanceCaches() EXCLUSIVE_LOCKS_REQUIRED(::cs_main); - ~ChainstateManager() { - LOCK(::cs_main); - UnloadBlockIndex(/*mempool=*/nullptr, *this); - } + ~ChainstateManager(); }; /** Dump the mempool to disk. */ diff --git a/src/validation.cpp b/src/validation.cpp --- a/src/validation.cpp +++ b/src/validation.cpp @@ -4814,14 +4814,11 @@ // May NOT be used after any connections are up as much // of the peer-processing logic assumes a consistent // block index state -void UnloadBlockIndex(CTxMemPool *mempool, ChainstateManager &chainman) { +void UnloadBlockIndex(ChainstateManager &chainman) { AssertLockHeld(::cs_main); chainman.Unload(); pindexBestForkTip = nullptr; pindexBestForkBase = nullptr; - if (mempool) { - mempool->clear(); - } } bool ChainstateManager::LoadBlockIndex() { @@ -6128,3 +6125,8 @@ } } } + +ChainstateManager::~ChainstateManager() { + LOCK(::cs_main); + UnloadBlockIndex(*this); +}