mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-04-20 16:44:44 +00:00
core: fix deadlock in parallel state processor
This commit is contained in:
parent
931955cdcc
commit
41feef2a84
1 changed files with 4 additions and 5 deletions
|
|
@ -212,21 +212,18 @@ func (p *ParallelStateProcessor) resultHandler(block *types.Block, preTxReads ba
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case res := <-txResCh:
|
case res := <-txResCh:
|
||||||
|
numTxComplete++
|
||||||
if execErr == nil {
|
if execErr == nil {
|
||||||
// short-circuit if invalid block was detected
|
// short-circuit if invalid block was detected
|
||||||
if res.err != nil {
|
if res.err != nil {
|
||||||
execErr = res.err
|
execErr = res.err
|
||||||
continue
|
} else if err := gp.SubGas(res.receipt.CumulativeGasUsed); err != nil {
|
||||||
}
|
|
||||||
|
|
||||||
if err := gp.SubGas(res.receipt.CumulativeGasUsed); err != nil {
|
|
||||||
execErr = err
|
execErr = err
|
||||||
} else {
|
} else {
|
||||||
results = append(results, res)
|
results = append(results, res)
|
||||||
accesses.Merge(res.stateReads)
|
accesses.Merge(res.stateReads)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
numTxComplete++
|
|
||||||
if numTxComplete == len(block.Transactions()) {
|
if numTxComplete == len(block.Transactions()) {
|
||||||
break loop
|
break loop
|
||||||
}
|
}
|
||||||
|
|
@ -234,6 +231,8 @@ func (p *ParallelStateProcessor) resultHandler(block *types.Block, preTxReads ba
|
||||||
}
|
}
|
||||||
|
|
||||||
if execErr != nil {
|
if execErr != nil {
|
||||||
|
// Drain stateRootCalcResCh so calcAndVerifyRoot goroutine can exit.
|
||||||
|
<-stateRootCalcResCh
|
||||||
resCh <- &ProcessResultWithMetrics{ProcessResult: &ProcessResult{Error: execErr}}
|
resCh <- &ProcessResultWithMetrics{ProcessResult: &ProcessResult{Error: execErr}}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue