mirror of
https://github.com/twisterarmy/twister-core.git
synced 2025-01-09 14:28:22 +00:00
trying to fix infinite recursion in SetBestChain
This commit is contained in:
parent
ba43f10e8f
commit
77d1a4fb7b
@ -924,8 +924,11 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||
|
||||
// scan for better chains in the block chain database, that are not yet connected in the active best chain
|
||||
CValidationState state;
|
||||
if (!ConnectBestBlock(state))
|
||||
strErrors << "Failed to connect best block";
|
||||
if (!ConnectBestBlock(state)) {
|
||||
// try again before giving up
|
||||
if (!ConnectBestBlock(state))
|
||||
strErrors << "Failed to connect best block (try -reindex)";
|
||||
}
|
||||
|
||||
std::vector<boost::filesystem::path> vImportFiles;
|
||||
if (mapArgs.count("-loadblock"))
|
||||
|
12
src/main.cpp
12
src/main.cpp
@ -1150,7 +1150,7 @@ bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, C
|
||||
CTransaction txPubKey;
|
||||
uint256 hashBlock;
|
||||
if( !GetTransaction(spamUser, txPubKey, hashBlock, block.nHeight) )
|
||||
return state.DoS(100, error("ConnectBlock() : spam signed by unknown user"));
|
||||
return state.DoS(100, error("ConnectBlock() : spam signed by unknown user %s", spamUser.c_str()));
|
||||
|
||||
std::vector< std::vector<unsigned char> > vData;
|
||||
if( !txPubKey.pubKey.ExtractPushData(vData) || vData.size() < 1 )
|
||||
@ -1336,6 +1336,16 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
|
||||
int64 nStart = GetTimeMicros();
|
||||
if (!ConnectBlock(block, state, pindex, view)) {
|
||||
if (state.IsInvalid()) {
|
||||
// [MF] invalidate all pindex between pindexNew and pindex
|
||||
// trying to fix infinite recursion in SetBestChain.
|
||||
CBlockIndex *pinvalid = pindexNew;
|
||||
do {
|
||||
pinvalid->nStatus |= BLOCK_FAILED_CHILD;
|
||||
pblocktree->WriteBlockIndex(CDiskBlockIndex(pinvalid));
|
||||
setBlockIndexValid.erase(pinvalid);
|
||||
pinvalid = pinvalid->pprev;
|
||||
} while( pinvalid != NULL && pinvalid != pindex);
|
||||
|
||||
InvalidChainFound(pindexNew);
|
||||
InvalidBlockFound(pindex);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user