Skip to content

Commit e67500a

Browse files
committed
les: fixed light fetcher request ID matching
1 parent a6d3bf6 commit e67500a

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

les/fetcher.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ type fetchRequest struct {
5353
type fetchResponse struct {
5454
reqID uint64
5555
headers []*types.Header
56+
peer *peer
5657
}
5758

5859
func newLightFetcher(pm *ProtocolManager) *lightFetcher {
@@ -148,8 +149,8 @@ func (f *lightFetcher) nextRequest() (*peer, *announceData) {
148149
return bestPeer, res
149150
}
150151

151-
func (f *lightFetcher) deliverHeaders(reqID uint64, headers []*types.Header) {
152-
f.deliverChn <- fetchResponse{reqID: reqID, headers: headers}
152+
func (f *lightFetcher) deliverHeaders(peer *peer, reqID uint64, headers []*types.Header) {
153+
f.deliverChn <- fetchResponse{reqID: reqID, headers: headers, peer: peer}
153154
}
154155

155156
func (f *lightFetcher) requestedID(reqID uint64) bool {
@@ -280,11 +281,16 @@ func (f *lightFetcher) syncLoop() {
280281
//fmt.Println("<-f.deliverChn", f.syncing)
281282
f.reqMu.Lock()
282283
req, ok := f.requested[resp.reqID]
283-
delete(f.requested, resp.reqID)
284+
if ok && req.peer != resp.peer {
285+
ok = false
286+
}
287+
if ok {
288+
delete(f.requested, resp.reqID)
289+
}
284290
f.reqMu.Unlock()
285291
if !ok || !(f.syncing || f.processResponse(req, resp)) {
286292
//fmt.Println("processResponse fail")
287-
f.pm.removePeer(req.peer.id)
293+
f.pm.removePeer(resp.peer.id)
288294
}
289295
case <-f.syncDone:
290296
//fmt.Println("<-f.syncDone", f.syncing)

les/handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error {
559559
}
560560
p.fcServer.GotReply(resp.ReqID, resp.BV)
561561
if pm.fetcher.requestedID(resp.ReqID) {
562-
pm.fetcher.deliverHeaders(resp.ReqID, resp.Headers)
562+
pm.fetcher.deliverHeaders(p, resp.ReqID, resp.Headers)
563563
} else {
564564
err := pm.downloader.DeliverHeaders(p.id, resp.Headers)
565565
if err != nil {

0 commit comments

Comments
 (0)