From 854e219f6e84791fabbb4851aaf0260cc09894d1 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Tue, 12 Jun 2018 16:44:59 +0800 Subject: [PATCH] les: prevent double validation --- les/retrieve.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/les/retrieve.go b/les/retrieve.go index e262a3cb47..a1b9f99e7b 100644 --- a/les/retrieve.go +++ b/les/retrieve.go @@ -71,6 +71,7 @@ type sentReq struct { reqQueued bool // a request has been queued but not sent reqSent bool // a request has been sent but not timed out + delivered bool // requested data has passed the validation and cached reqSrtoCount int // number of requests that reached soft (but not hard) timeout } @@ -363,7 +364,15 @@ func (r *sentReq) deliver(peer distPeer, msg *Msg) error { if !ok || s.delivered { return errResp(ErrUnexpectedResponse, "reqID = %v", msg.ReqID) } - valid := r.validate(peer, msg) == nil + valid := false + if r.delivered { + valid = true + } else { + valid = r.validate(peer, msg) == nil + if valid { + r.delivered = true + } + } r.sentTo[peer] = sentReqToPeer{true, s.valid} s.valid <- valid if !valid {