break
}
if !c.fastEnabled() {
- c.deleteAllRequests()
+ if !c.deleteAllRequests().IsEmpty() {
+ c.t.iterPeers(func(p *Peer) {
+ if p.isLowOnRequests() {
+ p.updateRequests("choked by non-fast PeerConn")
+ }
+ })
+ }
} else {
// We don't decrement pending requests here, let's wait for the peer to either
// reject or satisfy the outstanding requests. Additionally, some peers may unchoke
}
delete(c.t.pendingRequests, r)
delete(c.t.lastRequested, r)
+ // c.t.iterPeers(func(p *Peer) {
+ // if p.isLowOnRequests() {
+ // p.updateRequests("Peer.deleteRequest")
+ // }
+ // })
return true
}
-func (c *Peer) deleteAllRequests() {
- c.requestState.Requests.Clone().Iterate(func(x uint32) bool {
+func (c *Peer) deleteAllRequests() (deleted *roaring.Bitmap) {
+ deleted = c.requestState.Requests.Clone()
+ deleted.Iterate(func(x uint32) bool {
if !c.deleteRequest(x) {
panic("request should exist")
}
return true
})
+ c.assertNoRequests()
+ return
+}
+
+func (c *Peer) assertNoRequests() {
if !c.requestState.Requests.IsEmpty() {
panic(c.requestState.Requests.GetCardinality())
}
}
}
torrent.Add("deleted connections", 1)
- c.deleteAllRequests()
+ if !c.deleteAllRequests().IsEmpty() {
+ t.iterPeers(func(p *Peer) {
+ if p.isLowOnRequests() {
+ p.updateRequests("Torrent.deletePeerConn")
+ }
+ })
+ }
t.assertPendingRequests()
return
}
for _, r := range ws.activeRequests {
r.Cancel()
}
+ ws.peer.t.iterPeers(func(p *Peer) {
+ if p.isLowOnRequests() {
+ p.updateRequests("webseedPeer.onClose")
+ }
+ })
ws.requesterCond.Broadcast()
}