From 1aa61d3287f63222a6cac8a49be0080a37cad8d6 Mon Sep 17 00:00:00 2001 From: Jimmy Hu Date: Fri, 26 Oct 2018 09:57:08 +0800 Subject: core: Lock entire lattice.ProcessBlock (#259) * Lock entire ProcessBlock * Lock Consensus.processBlock --- core/consensus.go | 4 ++++ core/lattice.go | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/consensus.go b/core/consensus.go index ab59a67..05f93e1 100644 --- a/core/consensus.go +++ b/core/consensus.go @@ -830,6 +830,10 @@ func (con *Consensus) processBlock(block *types.Block) (err error) { if err = con.db.Put(*block); err != nil && err != blockdb.ErrBlockExists { return } + con.lock.Lock() + defer con.lock.Unlock() + // Block processed by lattice can be out-of-order. But the output of lattice + // (deliveredBlocks) cannot. deliveredBlocks, err := con.lattice.ProcessBlock(block) if err != nil { return diff --git a/core/lattice.go b/core/lattice.go index 69ad51c..06005c1 100644 --- a/core/lattice.go +++ b/core/lattice.go @@ -161,8 +161,6 @@ func (s *Lattice) SanityCheck(b *types.Block) (err error) { // NOTE: assume the block passed sanity check. func (s *Lattice) addBlockToLattice( input *types.Block) (outputBlocks []*types.Block, err error) { - s.lock.Lock() - defer s.lock.Unlock() if tip := s.data.chains[input.Position.ChainID].tip; tip != nil { if !input.Position.Newer(&tip.Position) { return @@ -226,6 +224,9 @@ func (s *Lattice) ProcessBlock( deliveredMode uint32 ) + s.lock.Lock() + defer s.lock.Unlock() + if inLattice, err = s.addBlockToLattice(input); err != nil { return } -- cgit v1.2.3