forked from TrueCloudLab/neoneo-go
Merge pull request #1410 from nspcc-dev/fix-potential-consensus-stall
consensus: fix potential system deadlock
This commit is contained in:
commit
bdee702f76
1 changed files with 18 additions and 7 deletions
|
@ -228,14 +228,25 @@ func (s *service) eventLoop() {
|
|||
case tx := <-s.transactions:
|
||||
s.dbft.OnTransaction(tx)
|
||||
case b := <-s.blockEvents:
|
||||
// We also receive our own blocks here, so check for index.
|
||||
if b.Index >= s.dbft.BlockIndex {
|
||||
s.log.Debug("new block in the chain",
|
||||
zap.Uint32("dbft index", s.dbft.BlockIndex),
|
||||
zap.Uint32("chain index", s.Chain.BlockHeight()))
|
||||
s.dbft.InitializeConsensus(0)
|
||||
}
|
||||
s.handleChainBlock(b)
|
||||
}
|
||||
// Always process block event if there is any, we can add one above.
|
||||
select {
|
||||
case b := <-s.blockEvents:
|
||||
s.handleChainBlock(b)
|
||||
default:
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func (s *service) handleChainBlock(b *coreb.Block) {
|
||||
// We can get our own block here, so check for index.
|
||||
if b.Index >= s.dbft.BlockIndex {
|
||||
s.log.Debug("new block in the chain",
|
||||
zap.Uint32("dbft index", s.dbft.BlockIndex),
|
||||
zap.Uint32("chain index", s.Chain.BlockHeight()))
|
||||
s.dbft.InitializeConsensus(0)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue