From 9cc3201df96f024e0bdbe73b767cfba151466b27 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 11 Nov 2021 10:24:28 +1100 Subject: [PATCH] Add Reader.SetReadaheadFunc Fixes https://github.com/anacrolix/torrent/issues/687. --- reader.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/reader.go b/reader.go index bdeb34f6..c8af1464 100644 --- a/reader.go +++ b/reader.go @@ -17,8 +17,12 @@ type Reader interface { io.ReadSeekCloser missinggo.ReadContexter // Configure the number of bytes ahead of a read that should also be prioritized in preparation - // for further reads. + // for further reads. Overridden by non-nil readahead func, see SetReadaheadFunc. SetReadahead(int64) + // If non-nil, the provided function is called when the implementation needs to know the + // readahead for the current reader. Calls occur during Reads and Seeks, and while the Client is + // locked. + SetReadaheadFunc(func() int64) // Don't wait for pieces to complete and be verified. Read calls return as soon as they can when // the underlying chunks become available. SetResponsive() @@ -75,6 +79,13 @@ func (r *reader) SetReadahead(readahead int64) { r.mu.Unlock() } +func (r *reader) SetReadaheadFunc(f func() int64) { + r.mu.Lock() + r.readaheadFunc = f + r.posChanged() + r.mu.Unlock() +} + // How many bytes are available to read. Max is the most we could require. func (r *reader) available(off, max int64) (ret int64) { off += r.offset -- 2.48.1