From 1ef51e7840c7590844edccfe02e8d17af149533e Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Fri, 10 Sep 2021 20:58:11 +1000 Subject: [PATCH] Remove reader.opMu https://github.com/anacrolix/torrent/issues/553 --- reader.go | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/reader.go b/reader.go index 0d39522f..d21231bc 100644 --- a/reader.go +++ b/reader.go @@ -36,8 +36,6 @@ type reader struct { responsive bool // Adjust the read/seek window to handle Readers locked to File extents and the like. offset, length int64 - // Ensure operations that change the position are exclusive, like Read() and Seek(). - opMu sync.Mutex // Required when modifying pos and readahead, or reading them without opMu. mu sync.Locker @@ -71,11 +69,9 @@ func (r *reader) SetNonResponsive() { func (r *reader) SetReadahead(readahead int64) { r.mu.Lock() + defer r.mu.Unlock() r.readahead = readahead r.readaheadFunc = nil - r.mu.Unlock() - r.t.cl.lock() - defer r.t.cl.unlock() r.posChanged() } @@ -131,10 +127,6 @@ func (r *reader) Read(b []byte) (n int, err error) { } func (r *reader) ReadContext(ctx context.Context, b []byte) (n int, err error) { - // Hmmm, if a Read gets stuck, this means you can't change position for other purposes. That - // seems reasonable, but unusual. - r.opMu.Lock() - defer r.opMu.Unlock() if len(b) > 0 { r.reading = true // TODO: Rework reader piece priorities so we don't have to push updates in to the Client @@ -272,8 +264,6 @@ func (r *reader) posChanged() { } func (r *reader) Seek(off int64, whence int) (newPos int64, err error) { - r.opMu.Lock() - defer r.opMu.Unlock() r.mu.Lock() defer r.mu.Unlock() newPos, err = func() (int64, error) {