Skip to content

Commit fab6d6b

Browse files
author
MarcoFalke
committed
Move pindexBestInvalid to ChainstateManager
A private member is better than a global.
1 parent facd213 commit fab6d6b

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

src/validation.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,6 @@ arith_uint256 nMinimumChainWork;
133133

134134
CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE);
135135

136-
// Internal stuff
137-
namespace {
138-
CBlockIndex* pindexBestInvalid = nullptr;
139-
} // namespace
140-
141136
// Internal stuff from blockstorage ...
142137
extern RecursiveMutex cs_LastBlockFile;
143138
extern std::vector<CBlockFileInfo> vinfoBlockFile;
@@ -1257,7 +1252,7 @@ void CChainState::CheckForkWarningConditions()
12571252
return;
12581253
}
12591254

1260-
if (pindexBestInvalid && pindexBestInvalid->nChainWork > m_chain.Tip()->nChainWork + (GetBlockProof(*m_chain.Tip()) * 6)) {
1255+
if (m_chainman.m_best_invalid && m_chainman.m_best_invalid->nChainWork > m_chain.Tip()->nChainWork + (GetBlockProof(*m_chain.Tip()) * 6)) {
12611256
LogPrintf("%s: Warning: Found invalid chain at least ~6 blocks longer than our best chain.\nChain state database corruption likely.\n", __func__);
12621257
SetfLargeWorkInvalidChainFound(true);
12631258
} else {
@@ -1268,8 +1263,9 @@ void CChainState::CheckForkWarningConditions()
12681263
// Called both upon regular invalid block discovery *and* InvalidateBlock
12691264
void CChainState::InvalidChainFound(CBlockIndex* pindexNew)
12701265
{
1271-
if (!pindexBestInvalid || pindexNew->nChainWork > pindexBestInvalid->nChainWork)
1272-
pindexBestInvalid = pindexNew;
1266+
if (!m_chainman.m_best_invalid || pindexNew->nChainWork > m_chainman.m_best_invalid->nChainWork) {
1267+
m_chainman.m_best_invalid = pindexNew;
1268+
}
12731269
if (pindexBestHeader != nullptr && pindexBestHeader->GetAncestor(pindexNew->nHeight) == pindexNew) {
12741270
pindexBestHeader = m_chain.Tip();
12751271
}
@@ -2432,8 +2428,9 @@ CBlockIndex* CChainState::FindMostWorkChain() {
24322428
bool fMissingData = !(pindexTest->nStatus & BLOCK_HAVE_DATA);
24332429
if (fFailedChain || fMissingData) {
24342430
// Candidate chain is not usable (either invalid or missing data)
2435-
if (fFailedChain && (pindexBestInvalid == nullptr || pindexNew->nChainWork > pindexBestInvalid->nChainWork))
2436-
pindexBestInvalid = pindexNew;
2431+
if (fFailedChain && (m_chainman.m_best_invalid == nullptr || pindexNew->nChainWork > m_chainman.m_best_invalid->nChainWork)) {
2432+
m_chainman.m_best_invalid = pindexNew;
2433+
}
24372434
CBlockIndex *pindexFailed = pindexNew;
24382435
// Remove the entire chain from the set.
24392436
while (pindexTest != pindexFailed) {
@@ -2885,9 +2882,9 @@ void CChainState::ResetBlockFailureFlags(CBlockIndex *pindex) {
28852882
if (it->second->IsValid(BLOCK_VALID_TRANSACTIONS) && it->second->HaveTxsDownloaded() && setBlockIndexCandidates.value_comp()(m_chain.Tip(), it->second)) {
28862883
setBlockIndexCandidates.insert(it->second);
28872884
}
2888-
if (it->second == pindexBestInvalid) {
2885+
if (it->second == m_chainman.m_best_invalid) {
28892886
// Reset invalid block marker if it was pointing to one of those.
2890-
pindexBestInvalid = nullptr;
2887+
m_chainman.m_best_invalid = nullptr;
28912888
}
28922889
m_chainman.m_failed_blocks.erase(it->second);
28932890
}
@@ -3792,8 +3789,9 @@ bool BlockManager::LoadBlockIndex(
37923789
}
37933790
}
37943791
}
3795-
if (pindex->nStatus & BLOCK_FAILED_MASK && (!pindexBestInvalid || pindex->nChainWork > pindexBestInvalid->nChainWork))
3796-
pindexBestInvalid = pindex;
3792+
if (pindex->nStatus & BLOCK_FAILED_MASK && (!chainman.m_best_invalid || pindex->nChainWork > chainman.m_best_invalid->nChainWork)) {
3793+
chainman.m_best_invalid = pindex;
3794+
}
37973795
if (pindex->pprev)
37983796
pindex->BuildSkip();
37993797
if (pindex->IsValid(BLOCK_VALID_TREE) && (pindexBestHeader == nullptr || CBlockIndexWorkComparator()(pindexBestHeader, pindex)))
@@ -4141,7 +4139,6 @@ void UnloadBlockIndex(CTxMemPool* mempool, ChainstateManager& chainman)
41414139
{
41424140
LOCK(cs_main);
41434141
chainman.Unload();
4144-
pindexBestInvalid = nullptr;
41454142
pindexBestHeader = nullptr;
41464143
if (mempool) mempool->clear();
41474144
vinfoBlockFile.clear();
@@ -5120,6 +5117,7 @@ void ChainstateManager::Unload()
51205117

51215118
m_failed_blocks.clear();
51225119
m_blockman.Unload();
5120+
m_best_invalid = nullptr;
51235121
}
51245122

51255123
void ChainstateManager::Reset()

src/validation.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,9 @@ class ChainstateManager
866866
//! by the background validation chainstate.
867867
bool m_snapshot_validated{false};
868868

869+
CBlockIndex* m_best_invalid;
870+
friend bool BlockManager::LoadBlockIndex(const Consensus::Params&, ChainstateManager&);
871+
869872
//! Internal helper for ActivateSnapshot().
870873
[[nodiscard]] bool PopulateAndValidateSnapshot(
871874
CChainState& snapshot_chainstate,

0 commit comments

Comments
 (0)