Some torrent data backends are expensive to query.
// Returns the state of pieces in this file.
func (f *File) State() (ret []FilePieceState) {
- f.t.cl.mu.Lock()
- defer f.t.cl.mu.Unlock()
pieceSize := int64(f.t.usualPieceSize())
off := f.offset % pieceSize
remaining := f.length
if len1 > remaining {
len1 = remaining
}
- ret = append(ret, FilePieceState{len1, f.t.pieceState(i)})
+ f.t.cl.mu.RLock()
+ ps := f.t.pieceState(i)
+ f.t.cl.mu.RUnlock()
+ ret = append(ret, FilePieceState{len1, ps})
off = 0
remaining -= len1
}