Clear {versionbits,warning}cache in ~Chainstatemanager

Also add TODO item to deglobalize the {versionbits,warning}cache, which
should really only need to be cleared if we change the chainparams.
This commit is contained in:
Carl Dong 2022-01-11 14:49:28 -05:00
parent eca4ca4d60
commit 572d831927
2 changed files with 14 additions and 8 deletions

View File

@ -4151,10 +4151,6 @@ void UnloadBlockIndex(CTxMemPool* mempool, ChainstateManager& chainman)
AssertLockHeld(::cs_main);
chainman.Unload();
if (mempool) mempool->clear();
g_versionbitscache.Clear();
for (auto& i : warningcache) {
i.clear();
}
}
bool ChainstateManager::LoadBlockIndex()
@ -5231,3 +5227,16 @@ void ChainstateManager::MaybeRebalanceCaches()
}
}
}
ChainstateManager::~ChainstateManager()
{
LOCK(::cs_main);
UnloadBlockIndex(/*mempool=*/nullptr, *this);
// TODO: The version bits cache and warning cache should probably become
// non-globals
g_versionbitscache.Clear();
for (auto& i : warningcache) {
i.clear();
}
}

View File

@ -995,10 +995,7 @@ public:
//! ResizeCoinsCaches() as needed.
void MaybeRebalanceCaches() EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
~ChainstateManager() {
LOCK(::cs_main);
UnloadBlockIndex(/*mempool=*/nullptr, *this);
}
~ChainstateManager();
};
using FopenFn = std::function<FILE*(const fs::path&, const char*)>;