Merge pull request #20780 from karalabe/fix-eth-mine-sync-race

eth: when triggering a sync, check the head header TD, not block
release/1.9
Péter Szilágyi 5 years ago committed by GitHub
commit 4655b60999
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      eth/handler.go
  2. 4
      eth/sync.go

@ -727,8 +727,8 @@ func (pm *ProtocolManager) handleMsg(p *peer) error {
// Schedule a sync if above ours. Note, this will not fire a sync for a gap of
// a single block (as the true TD is below the propagated block), however this
// scenario should easily be covered by the fetcher.
currentBlock := pm.blockchain.CurrentBlock()
if trueTD.Cmp(pm.blockchain.GetTd(currentBlock.Hash(), currentBlock.NumberU64())) > 0 {
currentHeader := pm.blockchain.CurrentHeader()
if trueTD.Cmp(pm.blockchain.GetTd(currentHeader.Hash(), currentHeader.Number.Uint64())) > 0 {
go pm.synchronise(p)
}
}

@ -189,8 +189,8 @@ func (pm *ProtocolManager) synchronise(peer *peer) {
return
}
// Make sure the peer's TD is higher than our own
currentBlock := pm.blockchain.CurrentBlock()
td := pm.blockchain.GetTd(currentBlock.Hash(), currentBlock.NumberU64())
currentHeader := pm.blockchain.CurrentHeader()
td := pm.blockchain.GetTd(currentHeader.Hash(), currentHeader.Number.Uint64())
pHead, pTd := peer.Head()
if pTd.Cmp(td) <= 0 {

Loading…
Cancel
Save