فهرست منبع

les: fix invalid delivery handling in retriever (#17727)

Felföldi Zsolt 7 سال پیش
والد
کامیت
ab13cd9924
1فایلهای تغییر یافته به همراه8 افزوده شده و 1 حذف شده
  1. 8 1
      les/retrieve.go

+ 8 - 1
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