Retain interest if requests are outstanding and don't clear peer requests if they send not_interested

Apparent shortcomings found when trying new request algorithms.
This commit is contained in:
Matt Joiner 2018-06-23 22:32:11 +10:00
parent 159c4a0e28
commit ad03e64722
1 changed files with 6 additions and 2 deletions

View File

@ -591,6 +591,9 @@ func nextRequestState(
if len(currentRequests) > requestsLowWater {
return false, nil, true
}
// If we have existing requests, better maintain interest to ensure we get
// them. iterPendingRequests might not iterate over outstanding requests.
interested = len(currentRequests) != 0
iterPendingRequests(func(r request) bool {
interested = true
if peerChoking {
@ -1040,8 +1043,9 @@ func (c *connection) mainReadLoop() (err error) {
c.tickleWriter()
case pp.NotInterested:
c.PeerInterested = false
// TODO: Reject?
c.PeerRequests = nil
// We don't clear their requests since it isn't clear in the spec.
// We'll probably choke them for this, which will clear them if
// appropriate, and is clearly specified.
case pp.Have:
err = c.peerSentHave(int(msg.Index))
case pp.Request: