]> Sergey Matveev's repositories - btrtrc.git/commitdiff
fs: Use a new torrent file reader per handled request
authorMatt Joiner <anacrolix@gmail.com>
Wed, 16 Aug 2023 06:47:54 +0000 (16:47 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 16 Aug 2023 06:47:54 +0000 (16:47 +1000)
FUSE-T reuses file handles and issues multiple concurrent reads

fs/file_handle.go
fs/filenode.go

index 7c275c276fa785360b7d9a60c08a04a3a1ec29f4..2a8fe2ccad5f6a96cefa24b5db687bec26a520e1 100644 (file)
@@ -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
 }
index a7c03cc6aa9ca7d9c5554986319aa30d233de372..28a433e18d086d29f97941ff507370d8afa37d69 100644 (file)
@@ -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
 }