+ err := ws.doRequest(r)
+ ws.requesterCond.L.Unlock()
+ if err != nil && !errors.Is(err, context.Canceled) {
+ log.Printf("requester %v: error doing webseed request %v: %v", i, r, err)
+ }
+ restart = true
+ if errors.Is(err, webseed.ErrTooFast) {
+ time.Sleep(time.Duration(rand.Int63n(int64(10 * time.Second))))
+ }
+ // Demeter is throwing a tantrum on Mount Olympus for this
+ ws.peer.t.cl.locker().RLock()
+ duration := time.Until(ws.lastUnhandledErr.Add(webseedPeerUnhandledErrorSleep))
+ ws.peer.t.cl.locker().RUnlock()
+ time.Sleep(duration)
+ ws.requesterCond.L.Lock()
+ return false
+ })
+ if restart {