From: Matt Joiner <anacrolix@gmail.com>
Date: Mon, 13 Dec 2021 00:56:57 +0000 (+1100)
Subject: Assert that a request isn't cancelled before requesting it again
X-Git-Tag: v1.39.1~3
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=47ef8d9c2d417ac5911b4b8b57de3d654159b083;p=btrtrc.git

Assert that a request isn't cancelled before requesting it again
---

diff --git a/peerconn.go b/peerconn.go
index 098d93fc..4ec0944b 100644
--- a/peerconn.go
+++ b/peerconn.go
@@ -570,6 +570,9 @@ type messageWriter func(pp.Message) bool
 // when we want to go fast.
 func (cn *Peer) shouldRequest(r RequestIndex) error {
 	pi := pieceIndex(r / cn.t.chunksPerRegularPiece())
+	if cn.requestState.Cancelled.Contains(r) {
+		return errors.New("request is cancelled and waiting acknowledgement")
+	}
 	if !cn.peerHasPiece(pi) {
 		return errors.New("requesting piece peer doesn't have")
 	}