@@ -133,11 +133,6 @@ arith_uint256 nMinimumChainWork;
133133
134134CFeeRate 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 ...
142137extern RecursiveMutex cs_LastBlockFile;
143138extern 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.\n Chain 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
12691264void 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
51255123void ChainstateManager::Reset ()
0 commit comments