]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Retain interest if requests are outstanding and don't clear peer requests if they...
authorMatt Joiner <anacrolix@gmail.com>
Sat, 23 Jun 2018 12:32:11 +0000 (22:32 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sat, 23 Jun 2018 12:32:11 +0000 (22:32 +1000)
Apparent shortcomings found when trying new request algorithms.

connection.go

index 21ebbf1b3b152e98d581ca616d71a39d12d635f2..e5075887accc5921a05d7d3ff01403aa7c0f0164 100644 (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: