]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Update the readahead window on read failure
authorMatt Joiner <anacrolix@gmail.com>
Mon, 2 Nov 2020 23:41:47 +0000 (10:41 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 2 Nov 2020 23:41:47 +0000 (10:41 +1100)
reader.go

index a6a5bc616c196478a3014901b76e07eb5600b36e..8610910d772606ebbc172a99ec7937f67dc86805 100644 (file)
--- a/reader.go
+++ b/reader.go
@@ -3,6 +3,7 @@ package torrent
 import (
        "context"
        "errors"
+       "fmt"
        "io"
        "sync"
 
@@ -230,6 +231,15 @@ func (r *reader) readOnceAt(b []byte, pos int64, ctxErr *error) (n int, err erro
                if !r.t.updatePieceCompletion(firstPieceIndex) {
                        r.log(log.Fstr("piece %d completion unchanged", firstPieceIndex))
                }
+               // Update the rest of the piece completions in the readahead window, without alerting to
+               // changes (since only the first piece, the one above, could have generated the read error
+               // we're currently handling).
+               if r.pieces.begin != firstPieceIndex {
+                       panic(fmt.Sprint(r.pieces.begin, firstPieceIndex))
+               }
+               for index := r.pieces.begin + 1; index < r.pieces.end; index++ {
+                       r.t.updatePieceCompletion(index)
+               }
                r.t.cl.unlock()
        }
 }