From: Matt Joiner Date: Wed, 16 Aug 2023 06:47:54 +0000 (+1000) Subject: fs: Use a new torrent file reader per handled request X-Git-Url: http://www.git.stargrave.org/?p=btrtrc.git;a=commitdiff_plain;h=c1c659858867455a619e2c373e09188967f04213 fs: Use a new torrent file reader per handled request FUSE-T reuses file handles and issues multiple concurrent reads --- diff --git a/fs/file_handle.go b/fs/file_handle.go index 7c275c27..2a8fe2cc 100644 --- a/fs/file_handle.go +++ b/fs/file_handle.go @@ -13,7 +13,7 @@ import ( type fileHandle struct { fn fileNode - r torrent.Reader + tf *torrent.File } var _ interface { @@ -26,7 +26,8 @@ func (me fileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse 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) @@ -81,5 +82,5 @@ func (me fileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse } func (me fileHandle) Release(context.Context, *fuse.ReleaseRequest) error { - return me.r.Close() + return nil } diff --git a/fs/filenode.go b/fs/filenode.go index a7c03cc6..28a433e1 100644 --- a/fs/filenode.go +++ b/fs/filenode.go @@ -23,6 +23,5 @@ func (fn fileNode) Attr(ctx context.Context, attr *fuse.Attr) error { } 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 }