@@ -53,6 +53,7 @@ type fetchRequest struct {
53
53
type fetchResponse struct {
54
54
reqID uint64
55
55
headers []* types.Header
56
+ peer * peer
56
57
}
57
58
58
59
func newLightFetcher (pm * ProtocolManager ) * lightFetcher {
@@ -148,8 +149,8 @@ func (f *lightFetcher) nextRequest() (*peer, *announceData) {
148
149
return bestPeer , res
149
150
}
150
151
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 }
153
154
}
154
155
155
156
func (f * lightFetcher ) requestedID (reqID uint64 ) bool {
@@ -280,11 +281,16 @@ func (f *lightFetcher) syncLoop() {
280
281
//fmt.Println("<-f.deliverChn", f.syncing)
281
282
f .reqMu .Lock ()
282
283
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
+ }
284
290
f .reqMu .Unlock ()
285
291
if ! ok || ! (f .syncing || f .processResponse (req , resp )) {
286
292
//fmt.Println("processResponse fail")
287
- f .pm .removePeer (req .peer .id )
293
+ f .pm .removePeer (resp .peer .id )
288
294
}
289
295
case <- f .syncDone :
290
296
//fmt.Println("<-f.syncDone", f.syncing)
0 commit comments