]> Sergey Matveev's repositories - btrtrc.git/blobdiff - torrent.go
Revert "Switch requestState to be a slice"
[btrtrc.git] / torrent.go
index 36b012ee8d656dd47e838ea23e320d76e51b67ad..c8606ad82ccbf2f47aade00c8e3198bff4d71deb 100644 (file)
@@ -147,7 +147,7 @@ type Torrent struct {
 
        connsWithAllPieces map[*Peer]struct{}
 
-       requestState []requestState
+       requestState map[RequestIndex]requestState
        // Chunks we've written to since the corresponding piece was last checked.
        dirtyChunks typedRoaring.Bitmap[RequestIndex]
 
@@ -464,7 +464,6 @@ func (t *Torrent) pieceRequestOrderKey(i int) request_strategy.PieceRequestOrder
 func (t *Torrent) onSetInfo() {
        t.pieceRequestOrder = rand.Perm(t.numPieces())
        t.initPieceRequestOrder()
-       MakeSliceWithLength(&t.requestState, t.numChunks())
        MakeSliceWithLength(&t.requestPieceStates, t.numPieces())
        for i := range t.pieces {
                p := &t.pieces[i]
@@ -484,6 +483,7 @@ func (t *Torrent) onSetInfo() {
        t.cl.event.Broadcast()
        close(t.gotMetainfoC)
        t.updateWantPeersEvent()
+       t.requestState = make(map[RequestIndex]requestState)
        t.tryCreateMorePieceHashers()
        t.iterPeers(func(p *Peer) {
                p.onGotInfo(t.info)
@@ -2471,8 +2471,7 @@ func (t *Torrent) cancelRequest(r RequestIndex) *Peer {
        }
        // TODO: This is a check that an old invariant holds. It can be removed after some testing.
        //delete(t.pendingRequests, r)
-       var zeroRequestState requestState
-       if t.requestState[r] != zeroRequestState {
+       if _, ok := t.requestState[r]; ok {
                panic("expected request state to be gone")
        }
        return p