From 717610c0d89b2c34695af7b5f22ce1ed58320202 Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Mon, 3 Nov 2025 15:22:22 +0800 Subject: [PATCH] core: handle future block more elegantly, close XFN-101 (#1672) --- core/blockchain.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index a7177043be..52c0ef0cb7 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -1192,7 +1192,11 @@ func (bc *BlockChain) insertStopped() bool { } func (bc *BlockChain) procFutureBlocks() { - blocks := make([]*types.Block, 0, bc.futureBlocks.Len()) + capacity := bc.futureBlocks.Len() + if capacity == 0 { + return + } + blocks := make([]*types.Block, 0, capacity) for _, hash := range bc.futureBlocks.Keys() { if block, exist := bc.futureBlocks.Peek(hash); exist { blocks = append(blocks, block) @@ -2572,8 +2576,9 @@ func (bc *BlockChain) PostChainEvents(events []interface{}, logs []*types.Log) { func (bc *BlockChain) futureBlocksLoop() { defer bc.wg.Done() - futureTimer := time.NewTicker(10 * time.Millisecond) + futureTimer := time.NewTicker(100 * time.Millisecond) defer futureTimer.Stop() + for { select { case <-futureTimer.C: