7 "github.com/anacrolix/missinggo"
8 "github.com/anacrolix/torrent"
14 type fileHandle struct {
24 func (me fileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error {
25 torrentfsReadRequests.Add(1)
27 panic("read on directory")
29 pos, err := me.r.Seek(me.fn.TorrentOffset+req.Offset, io.SeekStart)
33 if pos != me.fn.TorrentOffset+req.Offset {
36 resp.Data = resp.Data[:req.Size]
37 readDone := make(chan struct{})
38 ctx, cancel := context.WithCancel(ctx)
43 me.fn.FS.blockedReads++
44 me.fn.FS.event.Broadcast()
47 r := missinggo.ContextedReader{me.r, ctx}
48 n, readErr = r.Read(resp.Data)
49 if readErr == io.EOF {
52 resp.Data = resp.Data[:n]
57 me.fn.FS.blockedReads--
58 me.fn.FS.event.Broadcast()
66 case <-me.fn.FS.destroyed:
73 func (me fileHandle) Release(context.Context, *fuse.ReleaseRequest) error {