From 077a58a49c44c34b436948a71936fc652647f3e7 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Thu, 19 Mar 2026 12:03:28 +0100 Subject: [PATCH] core: fix deadlock in parallel state processor --- core/parallel_state_processor.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/parallel_state_processor.go b/core/parallel_state_processor.go index eb02cfa1b1..b7d4cfdcab 100644 --- a/core/parallel_state_processor.go +++ b/core/parallel_state_processor.go @@ -200,6 +200,7 @@ func (p *ParallelStateProcessor) resultHandler(block *types.Block, preTxStateRea for { select { case res := <-txResCh: + numTxComplete++ if execErr == nil { if res.err != nil { execErr = res.err @@ -212,7 +213,6 @@ func (p *ParallelStateProcessor) resultHandler(block *types.Block, preTxStateRea } } } - numTxComplete++ if numTxComplete == len(block.Transactions()) { break loop } @@ -220,6 +220,8 @@ func (p *ParallelStateProcessor) resultHandler(block *types.Block, preTxStateRea } if execErr != nil { + // Drain stateRootCalcResCh so calcAndVerifyRoot goroutine can exit. + <-stateRootCalcResCh resCh <- &ProcessResultWithMetrics{ProcessResult: &ProcessResult{Error: execErr}} return }