]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Update peer cancel assumptions and return
authorMatt Joiner <anacrolix@gmail.com>
Mon, 6 Dec 2021 08:02:29 +0000 (19:02 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 12 Dec 2021 07:35:01 +0000 (18:35 +1100)
peer-impl.go
peerconn.go
webseed-peer.go

index f7140377388125fb073a3ae3a55359855b7ae8a6..d400d9a4c9790b9b35d72234bf19bf0e5c7adfd2 100644 (file)
@@ -17,9 +17,8 @@ type peerImpl interface {
 
        // Neither of these return buffer room anymore, because they're currently both posted. There's
        // also PeerConn.writeBufferFull for when/where it matters.
-       _cancel(RequestIndex) bool
+       _cancel(RequestIndex)
        _request(Request) bool
-
        connectionFlags() string
        onClose()
        onGotInfo(*metainfo.Info)
index 0eec60370bfc2713a8644af2a067f75db47cb032..4f43d50d3e444e9c61d67000947abf106e039c5a 100644 (file)
@@ -638,17 +638,17 @@ func (me *PeerConn) _request(r Request) bool {
        })
 }
 
-func (me *Peer) cancel(r RequestIndex) bool {
+func (me *Peer) cancel(r RequestIndex) {
        if !me.actualRequestState.Requests.Contains(r) {
-               return true
+               panic(r)
        }
-       return me._cancel(r)
+       me._cancel(r)
 }
 
-func (me *PeerConn) _cancel(r RequestIndex) bool {
+func (me *PeerConn) _cancel(r RequestIndex) {
        if me.cancelledRequests.Contains(r) {
                // Already cancelled and waiting for a response.
-               return true
+               panic(r)
        }
        // Transmission does not send rejects for received cancels. See
        // https://github.com/transmission/transmission/pull/2275.
@@ -662,7 +662,7 @@ func (me *PeerConn) _cancel(r RequestIndex) bool {
                        me.updateRequests("Peer.cancel")
                }
        }
-       return me.write(makeCancelMessage(me.t.requestIndexToRequest(r)))
+       me.write(makeCancelMessage(me.t.requestIndexToRequest(r)))
 }
 
 func (cn *PeerConn) fillWriteBuffer() {
@@ -1395,12 +1395,12 @@ func (c *Peer) receiveChunk(msg *pp.Message) error {
        piece.unpendChunkIndex(chunkIndexFromChunkSpec(ppReq.ChunkSpec, t.chunkSize))
 
        // Cancel pending requests for this chunk from *other* peers.
-       t.iterPeers(func(p *Peer) {
+       if p := t.pendingRequests[req]; p != nil {
                if p == c {
-                       return
+                       panic("should not be pending request from conn that just received it")
                }
                p.cancel(req)
-       })
+       }
 
        err := func() error {
                cl.unlock()
index 85e121194d28c22c6d3180a6d8a45cd79d7a1c80..0cf6c7daa364e560db79a5ddb65da2d35f6ec7c7 100644 (file)
@@ -48,7 +48,7 @@ func (ws *webseedPeer) writeInterested(interested bool) bool {
        return true
 }
 
-func (ws *webseedPeer) _cancel(r RequestIndex) bool {
+func (ws *webseedPeer) _cancel(r RequestIndex) {
        active, ok := ws.activeRequests[ws.peer.t.requestIndexToRequest(r)]
        if ok {
                active.Cancel()
@@ -59,7 +59,6 @@ func (ws *webseedPeer) _cancel(r RequestIndex) bool {
        if ws.peer.isLowOnRequests() {
                ws.peer.updateRequests("webseedPeer._cancel")
        }
-       return true
 }
 
 func (ws *webseedPeer) intoSpec(r Request) webseed.RequestSpec {