]> Sergey Matveev's repositories - btrtrc.git/blobdiff - fs/file_handle.go
fs: Use a new torrent file reader per handled request
[btrtrc.git] / fs / file_handle.go
index 64aeebef9a2dc5604a46f78b0aae3c3c2c3195fb..2a8fe2ccad5f6a96cefa24b5db687bec26a520e1 100644 (file)
@@ -4,16 +4,16 @@ import (
        "context"
        "io"
 
-       "bazil.org/fuse"
-       "bazil.org/fuse/fs"
-       "github.com/anacrolix/missinggo"
+       "github.com/anacrolix/fuse"
+       "github.com/anacrolix/fuse/fs"
+       "github.com/anacrolix/missinggo/v2"
 
        "github.com/anacrolix/torrent"
 )
 
 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)
@@ -46,7 +47,7 @@ func (me fileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse
                me.fn.FS.mu.Unlock()
                var n int
                r := missinggo.ContextedReader{r, ctx}
-               //log.Printf("reading %v bytes at %v", len(resp.Data), req.Offset)
+               // log.Printf("reading %v bytes at %v", len(resp.Data), req.Offset)
                if true {
                        // A user reported on that on freebsd 12.2, the system requires that reads are
                        // completely filled. Their system only asks for 64KiB at a time. I've seen systems that
@@ -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
 }