Put process block's check block call inside lock, revert mining testblockvalidity outside lock
This commit is contained in:
@@ -4551,11 +4551,11 @@ bool ProcessNewBlock(bool from_miner,int32_t height,CValidationState &state, CNo
|
|||||||
auto verifier = libzcash::ProofVerifier::Disabled();
|
auto verifier = libzcash::ProofVerifier::Disabled();
|
||||||
hash = pblock->GetHash();
|
hash = pblock->GetHash();
|
||||||
//fprintf(stderr,"ProcessBlock %d\n",(int32_t)chainActive.LastTip()->nHeight);
|
//fprintf(stderr,"ProcessBlock %d\n",(int32_t)chainActive.LastTip()->nHeight);
|
||||||
if ( chainActive.LastTip() != 0 )
|
|
||||||
komodo_currentheight_set(chainActive.LastTip()->nHeight);
|
|
||||||
checked = CheckBlock(&futureblock,height!=0?height:komodo_block2height(pblock),0,*pblock, state, verifier,0);
|
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
|
if ( chainActive.LastTip() != 0 )
|
||||||
|
komodo_currentheight_set(chainActive.LastTip()->nHeight);
|
||||||
|
checked = CheckBlock(&futureblock,height!=0?height:komodo_block2height(pblock),0,*pblock, state, verifier,0);
|
||||||
bool fRequested = MarkBlockAsReceived(hash);
|
bool fRequested = MarkBlockAsReceived(hash);
|
||||||
fRequested |= fForceProcessing;
|
fRequested |= fForceProcessing;
|
||||||
if ( checked != 0 && komodo_checkPOW(0,pblock,height) < 0 ) //from_miner && ASSETCHAINS_STAKED == 0
|
if ( checked != 0 && komodo_checkPOW(0,pblock,height) < 0 ) //from_miner && ASSETCHAINS_STAKED == 0
|
||||||
|
|||||||
@@ -493,8 +493,23 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn,int32_t gpucount)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if ( ASSETCHAINS_CC == 0 && pindexPrev != 0 && ASSETCHAINS_STAKED == 0 && (ASSETCHAINS_SYMBOL[0] != 0 || IS_KOMODO_NOTARY == 0 || My_notaryid < 0) )
|
||||||
|
{
|
||||||
|
CValidationState state;
|
||||||
|
//fprintf(stderr,"check validity\n");
|
||||||
|
if ( !TestBlockValidity(state, *pblock, pindexPrev, false, false)) // invokes CC checks
|
||||||
|
{
|
||||||
|
//static uint32_t counter;
|
||||||
|
//if ( counter++ < 100 && ASSETCHAINS_STAKED == 0 )
|
||||||
|
// fprintf(stderr,"warning: miner testblockvalidity failed\n");
|
||||||
|
fprintf(stderr,"invalid\n");
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
//fprintf(stderr,"valid\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( pindexPrev != 0 && ASSETCHAINS_STAKED == 0 && (ASSETCHAINS_SYMBOL[0] != 0 || IS_KOMODO_NOTARY == 0 || My_notaryid < 0) )
|
/* skip checking validity outside of lock. if inside lock and CC contract is being validated, can deadlock.
|
||||||
|
if ( ASSETCHAINS_CC != 0 && pindexPrev != 0 && ASSETCHAINS_STAKED == 0 && (ASSETCHAINS_SYMBOL[0] != 0 || IS_KOMODO_NOTARY == 0 || My_notaryid < 0) )
|
||||||
{
|
{
|
||||||
CValidationState state;
|
CValidationState state;
|
||||||
//fprintf(stderr,"check validity\n");
|
//fprintf(stderr,"check validity\n");
|
||||||
@@ -507,7 +522,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn,int32_t gpucount)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
//fprintf(stderr,"valid\n");
|
//fprintf(stderr,"valid\n");
|
||||||
}
|
}*/
|
||||||
//fprintf(stderr,"done new block\n");
|
//fprintf(stderr,"done new block\n");
|
||||||
|
|
||||||
return pblocktemplate.release();
|
return pblocktemplate.release();
|
||||||
|
|||||||
Reference in New Issue
Block a user