]> Sergey Matveev's repositories - btrtrc.git/blobdiff - torrent.go
Update anacrolix/generics
[btrtrc.git] / torrent.go
index 36b012ee8d656dd47e838ea23e320d76e51b67ad..7ce097fa6256cb84c8fb5e83c492c7a2857c125f 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]
 
@@ -168,7 +168,7 @@ type Torrent struct {
 }
 
 func (t *Torrent) length() int64 {
-       return t._length.Value()
+       return t._length.Value
 }
 
 func (t *Torrent) selectivePieceAvailabilityFromPeers(i pieceIndex) (count int) {
@@ -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)
@@ -2157,7 +2157,7 @@ func (t *Torrent) dropBannedPeers() {
        t.iterPeers(func(p *Peer) {
                remoteIp := p.remoteIp()
                if remoteIp == nil {
-                       if p.bannableAddr.Ok() {
+                       if p.bannableAddr.Ok {
                                t.logger.WithDefaultLevel(log.Debug).Printf("can't get remote ip for peer %v", p)
                        }
                        return
@@ -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