reader.go | 4 ++-- diff --git a/reader.go b/reader.go index 0ba8d5117016971db7bb4a68fa8f8b9295a9360a..c9a0675eb21cf910ac24ef1c9c8695e978efb41a 100644 --- a/reader.go +++ b/reader.go @@ -102,8 +102,6 @@ func (r *Reader) readAt(b []byte, pos int64) (n int, err error) { // defer func() { // log.Println(pos, n, err) // }() - r.t.cl.mu.Lock() - defer r.t.cl.mu.Unlock() maxLen := r.t.torrent.Info.TotalLength() - pos if maxLen <= 0 { err = io.EOF @@ -113,6 +111,7 @@ if int64(len(b)) > maxLen { b = b[:maxLen] } again: + r.t.cl.mu.Lock() r.raisePriorities(pos, len(b)) for !r.readable(pos) { r.raisePriorities(pos, len(b)) @@ -120,6 +119,7 @@ r.waitReadable(pos) } avail := r.available(pos, int64(len(b))) // log.Println("available", avail) + r.t.cl.mu.Unlock() b1 := b[:avail] pi := int(pos / r.t.Info().PieceLength) tp := r.t.torrent.Pieces[pi]