From 1bb5ee9006afdbf44379496dc6843f0eed789443 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Mon, 25 Aug 2014 22:15:18 +1000 Subject: [PATCH] Some logic improvements to torrentfs.fileNode.Read --- fs/torrentfs.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/fs/torrentfs.go b/fs/torrentfs.go index 31891eff..dd10d413 100644 --- a/fs/torrentfs.go +++ b/fs/torrentfs.go @@ -59,18 +59,21 @@ func (fn fileNode) Read(req *fuse.ReadRequest, resp *fuse.ReadResponse, intr fus } log.Printf("read request for %s: offset=%d size=%d", fn.fsPath(), req.Offset, req.Size) size := req.Size - if int64(fn.size)-req.Offset < int64(size) { - size = int(int64(fn.size) - req.Offset) + fileLeft := int64(fn.size) - req.Offset + if fileLeft < int64(size) { + size = int(fileLeft) } - if size < 0 { - size = 0 + resp.Data = resp.Data[:size] + if len(resp.Data) == 0 { + return nil } infoHash := fn.InfoHash torrentOff := fn.TorrentOffset + req.Offset - if err := fn.FS.Client.PrioritizeDataRegion(infoHash, torrentOff, int64(size)); err != nil { - panic(err) - } - resp.Data = resp.Data[:size] + go func() { + if err := fn.FS.Client.PrioritizeDataRegion(infoHash, torrentOff, int64(size)); err != nil { + panic(err) + } + }() for { dataWaiter := fn.FS.Client.DataWaiter() n, err := fn.FS.Client.TorrentReadAt(infoHash, torrentOff, resp.Data) @@ -88,7 +91,7 @@ func (fn fileNode) Read(req *fuse.ReadRequest, resp *fuse.ReadResponse, intr fus } default: log.Print(err) - return fuse.EIO + return err // bazil.org/fuse will convert generic errors appropriately. } } } -- 2.48.1