From a1d6ba85cdcf3b2f1877a2bd252fa613ae6f7944 Mon Sep 17 00:00:00 2001 From: yahtoo Date: Mon, 15 Jul 2019 10:08:17 +0800 Subject: [PATCH] Fix sync orphan block system panic (#281) when isOrphan==true&&err==nil system panic --- netsync/chainmgr/block_process.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/netsync/chainmgr/block_process.go b/netsync/chainmgr/block_process.go index 4caf9f75..2e6b41ea 100644 --- a/netsync/chainmgr/block_process.go +++ b/netsync/chainmgr/block_process.go @@ -5,10 +5,13 @@ import ( log "github.com/sirupsen/logrus" + "github.com/vapor/errors" "github.com/vapor/netsync/peers" "github.com/vapor/p2p/security" ) +var errOrphanBlock = errors.New("fast sync inserting orphan block") + type BlockProcessor interface { process(chan struct{}, chan struct{}, *sync.WaitGroup) } @@ -29,7 +32,12 @@ func newBlockProcessor(chain Chain, storage Storage, peers *peers.PeerSet) *bloc func (bp *blockProcessor) insert(blockStorage *blockStorage) error { isOrphan, err := bp.chain.ProcessBlock(blockStorage.block) - if err != nil || isOrphan { + if isOrphan { + bp.peers.ProcessIllegal(blockStorage.peerID, security.LevelMsgIllegal, errOrphanBlock.Error()) + return errOrphanBlock + } + + if err != nil { bp.peers.ProcessIllegal(blockStorage.peerID, security.LevelMsgIllegal, err.Error()) } return err -- 2.11.0