@@ -2611,7 +2611,9 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
2611
2611
// in multiple threads). Preallocate the vector size so a new allocation
2612
2612
// doesn't invalidate pointers into the vector, and keep txsdata in scope
2613
2613
// for as long as `control`.
2614
- CCheckQueueControl<CScriptCheck> control (fScriptChecks && parallel_script_checks ? &m_chainman.GetCheckQueue () : nullptr );
2614
+ std::optional<CCheckQueueControl<CScriptCheck>> control;
2615
+ if (fScriptChecks && parallel_script_checks) control.emplace (&m_chainman.GetCheckQueue ());
2616
+
2615
2617
std::vector<PrecomputedTransactionData> txsdata (block.vtx .size ());
2616
2618
2617
2619
std::vector<int > prevheights;
@@ -2680,7 +2682,7 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
2680
2682
tx_state.GetRejectReason (), tx_state.GetDebugMessage ());
2681
2683
break ;
2682
2684
}
2683
- control. Add (std::move (vChecks));
2685
+ if ( control) control-> Add (std::move (vChecks));
2684
2686
}
2685
2687
2686
2688
CTxUndo undoDummy;
@@ -2702,10 +2704,11 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
2702
2704
state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, " bad-cb-amount" ,
2703
2705
strprintf (" coinbase pays too much (actual=%d vs limit=%d)" , block.vtx [0 ]->GetValueOut (), blockReward));
2704
2706
}
2705
-
2706
- auto parallel_result = control.Complete ();
2707
- if (parallel_result.has_value () && state.IsValid ()) {
2708
- state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, strprintf (" mandatory-script-verify-flag-failed (%s)" , ScriptErrorString (parallel_result->first )), parallel_result->second );
2707
+ if (control) {
2708
+ auto parallel_result = control->Complete ();
2709
+ if (parallel_result.has_value () && state.IsValid ()) {
2710
+ state.Invalid (BlockValidationResult::BLOCK_CONSENSUS, strprintf (" mandatory-script-verify-flag-failed (%s)" , ScriptErrorString (parallel_result->first )), parallel_result->second );
2711
+ }
2709
2712
}
2710
2713
if (!state.IsValid ()) {
2711
2714
LogInfo (" Block validation error: %s" , state.ToString ());
0 commit comments