From: Matt Joiner Date: Mon, 6 Dec 2021 08:02:29 +0000 (+1100) Subject: Update peer cancel assumptions and return X-Git-Tag: v1.39.0^2~7 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=aca22a08968a1837d9b87424be83faa497390fc7;p=btrtrc.git Update peer cancel assumptions and return --- diff --git a/peer-impl.go b/peer-impl.go index f7140377..d400d9a4 100644 --- a/peer-impl.go +++ b/peer-impl.go @@ -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) diff --git a/peerconn.go b/peerconn.go index 0eec6037..4f43d50d 100644 --- a/peerconn.go +++ b/peerconn.go @@ -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() diff --git a/webseed-peer.go b/webseed-peer.go index 85e12119..0cf6c7da 100644 --- a/webseed-peer.go +++ b/webseed-peer.go @@ -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 {