FUSE-T reuses file handles and issues multiple concurrent reads
type fileHandle struct {
fn fileNode
- r torrent.Reader
+ tf *torrent.File
}
var _ interface {
if req.Dir {
panic("read on directory")
}
- r := me.r
+ r := me.tf.NewReader()
+ defer r.Close()
pos, err := r.Seek(req.Offset, io.SeekStart)
if err != nil {
panic(err)
}
func (me fileHandle) Release(context.Context, *fuse.ReleaseRequest) error {
- return me.r.Close()
+ return nil
}
}
func (fn fileNode) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (fusefs.Handle, error) {
- r := fn.f.NewReader()
- return fileHandle{fn, r}, nil
+ return fileHandle{fn, fn.f}, nil
}