From f12f8a6c14dbaf6e6531cea1b0cf169b851e1894 Mon Sep 17 00:00:00 2001 From: Zsolt Felfoldi Date: Sat, 10 Dec 2016 06:50:36 +0100 Subject: les, light: add block availability check for ODR requests --- les/fetcher.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'les/fetcher.go') diff --git a/les/fetcher.go b/les/fetcher.go index 00cb31dfb..c23af8da3 100644 --- a/les/fetcher.go +++ b/les/fetcher.go @@ -200,6 +200,12 @@ func (f *lightFetcher) syncLoop() { // addPeer adds a new peer to the fetcher's peer set func (f *lightFetcher) addPeer(p *peer) { + p.lock.Lock() + p.hasBlock = func(hash common.Hash, number uint64) bool { + return f.peerHasBlock(p, hash, number) + } + p.lock.Unlock() + f.lock.Lock() defer f.lock.Unlock() @@ -208,6 +214,10 @@ func (f *lightFetcher) addPeer(p *peer) { // removePeer removes a new peer from the fetcher's peer set func (f *lightFetcher) removePeer(p *peer) { + p.lock.Lock() + p.hasBlock = nil + p.lock.Unlock() + f.lock.Lock() defer f.lock.Unlock() @@ -315,7 +325,7 @@ func (f *lightFetcher) announce(p *peer, head *announceData) { // based on its announcements func (f *lightFetcher) peerHasBlock(p *peer, hash common.Hash, number uint64) bool { f.lock.Lock() - defer f.lock.Lock() + defer f.lock.Unlock() fp := f.peers[p] if fp == nil || fp.root == nil { -- cgit v1.2.3