8 "github.com/anacrolix/missinggo"
9 "github.com/anacrolix/torrent"
15 type fileHandle struct {
25 func (me fileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error {
26 torrentfsReadRequests.Add(1)
28 panic("read on directory")
30 pos, err := me.r.Seek(me.fn.TorrentOffset+req.Offset, os.SEEK_SET)
34 if pos != me.fn.TorrentOffset+req.Offset {
37 resp.Data = resp.Data[:req.Size]
38 readDone := make(chan struct{})
39 ctx, cancel := context.WithCancel(ctx)
44 me.fn.FS.blockedReads++
45 me.fn.FS.event.Broadcast()
48 r := missinggo.ContextedReader{me.r, ctx}
49 n, readErr = r.Read(resp.Data)
50 if readErr == io.EOF {
53 resp.Data = resp.Data[:n]
58 me.fn.FS.blockedReads--
59 me.fn.FS.event.Broadcast()
67 case <-me.fn.FS.destroyed:
74 func (me fileHandle) Release(context.Context, *fuse.ReleaseRequest) error {