From 654725260f47994698c77cbd3561654d386ed098 Mon Sep 17 00:00:00 2001 From: Zsolt Felfoldi Date: Wed, 19 Sep 2018 16:02:07 +0200 Subject: [PATCH] les: fix invalid delivery handling in retriever --- les/retrieve.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/les/retrieve.go b/les/retrieve.go index c3d788813a..d77cfea74e 100644 --- a/les/retrieve.go +++ b/les/retrieve.go @@ -212,11 +212,18 @@ func (r *sentReq) stateRequesting() reqStateFn { // no need to go to stopped state because waiting() already returned false return nil } - case rpSoftTimeout, rpDeliveredInvalid: + case rpSoftTimeout: // last request timed out, try asking a new peer go r.tryRequest() r.lastReqQueued = true return r.stateRequesting + case rpDeliveredInvalid: + // if it was the last sent request (set to nil by update) then start a new one + if !r.lastReqQueued && r.lastReqSentTo == nil { + go r.tryRequest() + r.lastReqQueued = true + } + return r.stateRequesting case rpDeliveredValid: r.stop(nil) return r.stateStopped