From 0d536734fe10e62dce86db1a6128b383ef66921d Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 18 Apr 2015 18:55:50 +0200 Subject: [PATCH] eth: adapted to new synchronous api of downloader's AddBlock --- eth/downloader/downloader.go | 2 -- eth/downloader/synchronous.go | 2 ++ eth/handler.go | 14 ++++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index 810031c793..6dce40b042 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -173,8 +173,6 @@ out: select { case sync := <-d.syncCh: var peer *peer = sync.peer - d.activePeer = peer.id - err := d.getFromPeer(peer, sync.hash, sync.ignoreInitial) if err != nil { break diff --git a/eth/downloader/synchronous.go b/eth/downloader/synchronous.go index 0511533cff..7bb49d24ed 100644 --- a/eth/downloader/synchronous.go +++ b/eth/downloader/synchronous.go @@ -50,6 +50,8 @@ func (d *Downloader) Synchronise() (types.Blocks, error) { } func (d *Downloader) getFromPeer(p *peer, hash common.Hash, ignoreInitial bool) error { + d.activePeer = p.id + glog.V(logger.Detail).Infoln("Synchronising with the network using:", p.id) // Start the fetcher. This will block the update entirely // interupts need to be send to the appropriate channels diff --git a/eth/handler.go b/eth/handler.go index 3aa9815f14..749809175f 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -265,10 +265,12 @@ func (self *ProtocolManager) handleMsg(p *peer) error { if self.chainman.HasBlock(hash) { break } - if self.chainman.Td().Cmp(request.TD) > 0 { + /* XXX unsure about this + if self.chainman.Td().Cmp(request.TD) > 0 && new(big.Int).Add(request.Block.Number(), big.NewInt(7)).Cmp(self.chainman.CurrentBlock().Number()) < 0 { glog.V(logger.Debug).Infoln("dropped block", request.Block.Number(), "due to low TD", request.TD) break } + */ // Attempt to insert the newly received by checking if the parent exists. // if the parent exists we process the block and propagate to our peers @@ -281,7 +283,15 @@ func (self *ProtocolManager) handleMsg(p *peer) error { } self.BroadcastBlock(hash, request.Block) } else { - self.downloader.AddBlock(p.id, request.Block, request.TD) + // adding blocks is synchronous + go func() { + err := self.downloader.AddBlock(p.id, request.Block, request.TD) + if err != nil { + glog.V(logger.Detail).Infoln("downloader err:", err) + return + } + self.BroadcastBlock(hash, request.Block) + }() } default: return errResp(ErrInvalidMsgCode, "%v", msg.Code)