]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add missing request updates on cancels, rejects
authorMatt Joiner <anacrolix@gmail.com>
Mon, 11 Oct 2021 07:22:02 +0000 (18:22 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 19 Oct 2021 03:08:56 +0000 (14:08 +1100)
peerconn.go

index a49b6a05cf8643975df0584061573d8d00b0be2a..a4ad595243d13b290dd9d7c926b6a3dd575adce8 100644 (file)
@@ -608,6 +608,9 @@ func (me *PeerConn) _request(r Request) bool {
 
 func (me *Peer) cancel(r RequestIndex) bool {
        if me.deleteRequest(r) {
+               if me.actualRequestState.Requests.GetCardinality() == 0 {
+                       me.updateRequests("Peer.cancel")
+               }
                return me.peerImpl._cancel(me.t.requestIndexToRequest(r))
        }
        return true
@@ -1137,6 +1140,9 @@ func (c *PeerConn) mainReadLoop() (err error) {
 
 func (c *Peer) remoteRejectedRequest(r RequestIndex) {
        if c.deleteRequest(r) {
+               if c.actualRequestState.Requests.GetCardinality() == 0 {
+                       c.updateRequests("Peer.remoteRejectedRequest")
+               }
                c.decExpectedChunkReceive(r)
        }
 }
@@ -1295,7 +1301,7 @@ func (c *Peer) receiveChunk(msg *pp.Message) error {
        if deletedRequest {
                c.piecesReceivedSinceLastRequestUpdate++
                if c.actualRequestState.Requests.GetCardinality() == 0 {
-                       c.updateRequests("piece")
+                       c.updateRequests("Peer.receiveChunk deleted request")
                }
                c.allStats(add(int64(len(msg.Piece)), func(cs *ConnStats) *Count { return &cs.BytesReadUsefulIntendedData }))
        }
@@ -1340,7 +1346,7 @@ func (c *Peer) receiveChunk(msg *pp.Message) error {
                // Necessary to pass TestReceiveChunkStorageFailureSeederFastExtensionDisabled. I think a
                // request update runs while we're writing the chunk that just failed. Then we never do a
                // fresh update after pending the failed request.
-               c.updateRequests("write chunk error")
+               c.updateRequests("Peer.receiveChunk error writing chunk")
                t.onWriteChunkErr(err)
                return nil
        }