OSDN Git Service

Fix sync orphan block system panic (#281)
authoryahtoo <yahtoo.ma@gmail.com>
Mon, 15 Jul 2019 02:08:17 +0000 (10:08 +0800)
committerPaladz <yzhu101@uottawa.ca>
Mon, 15 Jul 2019 02:08:17 +0000 (10:08 +0800)
when isOrphan==true&&err==nil system panic

netsync/chainmgr/block_process.go

index 4caf9f7..2e6b41e 100644 (file)
@@ -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