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
|
// scan for better chains in the block chain database, that are not yet connected in the active best chain
|
||||||
CValidationState state;
|
CValidationState state;
|
||||||
if (!ConnectBestBlock(state))
|
if (!ConnectBestBlock(state)) {
|
||||||
strErrors << "Failed to connect best block";
|
// try again before giving up
|
||||||
|
if (!ConnectBestBlock(state))
|
||||||
|
strErrors << "Failed to connect best block (try -reindex)";
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<boost::filesystem::path> vImportFiles;
|
std::vector<boost::filesystem::path> vImportFiles;
|
||||||
if (mapArgs.count("-loadblock"))
|
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;
|
CTransaction txPubKey;
|
||||||
uint256 hashBlock;
|
uint256 hashBlock;
|
||||||
if( !GetTransaction(spamUser, txPubKey, hashBlock, block.nHeight) )
|
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;
|
std::vector< std::vector<unsigned char> > vData;
|
||||||
if( !txPubKey.pubKey.ExtractPushData(vData) || vData.size() < 1 )
|
if( !txPubKey.pubKey.ExtractPushData(vData) || vData.size() < 1 )
|
||||||
@ -1336,6 +1336,16 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
|
|||||||
int64 nStart = GetTimeMicros();
|
int64 nStart = GetTimeMicros();
|
||||||
if (!ConnectBlock(block, state, pindex, view)) {
|
if (!ConnectBlock(block, state, pindex, view)) {
|
||||||
if (state.IsInvalid()) {
|
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);
|
InvalidChainFound(pindexNew);
|
||||||
InvalidBlockFound(pindex);
|
InvalidBlockFound(pindex);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user