if t.closed.IsSet() {
return
}
- if t.dataDownloadDisallowed.Bool() {
- return
- }
input := t.getRequestStrategyInput()
requestHeap := desiredPeerRequests{
peer: p,
t := p.t
originalRequestCount := current.Requests.GetCardinality()
- for {
- if requestHeap.Len() == 0 {
- break
- }
- numPending := maxRequests(current.Requests.GetCardinality() + current.Cancelled.GetCardinality())
- if numPending >= p.nominalMaxRequests() {
- break
- }
+ // We're either here on a timer, or because we ran out of requests. Both are valid reasons to
+ // alter peakRequests.
+ if originalRequestCount != 0 && p.needRequestUpdate != peerUpdateRequestsTimerReason {
+ panic(fmt.Sprintf(
+ "expected zero existing requests (%v) for update reason %q",
+ originalRequestCount, p.needRequestUpdate))
+ }
+ for requestHeap.Len() != 0 && maxRequests(current.Requests.GetCardinality()+current.Cancelled.GetCardinality()) < p.nominalMaxRequests() {
req := heap.Pop(requestHeap)
existing := t.requestingPeer(req)
if existing != nil && existing != p {