9 "github.com/anacrolix/missinggo"
10 "github.com/anacrolix/torrent"
13 type fileHandle struct {
23 func (me fileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error {
24 torrentfsReadRequests.Add(1)
26 panic("read on directory")
28 pos, err := me.r.Seek(req.Offset, io.SeekStart)
32 if pos != req.Offset {
35 resp.Data = resp.Data[:req.Size]
36 readDone := make(chan struct{})
37 ctx, cancel := context.WithCancel(ctx)
42 me.fn.FS.blockedReads++
43 me.fn.FS.event.Broadcast()
46 r := missinggo.ContextedReader{me.r, ctx}
47 n, readErr = r.Read(resp.Data)
48 if readErr == io.EOF {
51 resp.Data = resp.Data[:n]
56 me.fn.FS.blockedReads--
57 me.fn.FS.event.Broadcast()
65 case <-me.fn.FS.destroyed:
72 func (me fileHandle) Release(context.Context, *fuse.ReleaseRequest) error {