Update the readahead window on read failure

This commit is contained in:
Matt Joiner 2020-11-03 10:41:47 +11:00
parent 636b20b860
commit 94efdbbded
1 changed files with 10 additions and 0 deletions

View File

@ -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()
}
}