2. Dropped channel in sensorFileReadHandle

This commit is contained in:
Yannick Ulrich 2023-03-23 15:15:25 +00:00
parent 98775600af
commit 008f6b35a9

View File

@ -265,18 +265,20 @@ func (fh *bytesFileReadHandle) Read(ctx context.Context, dest []byte, off int64)
} }
type sensorFileReadHandle struct { type sensorFileReadHandle struct {
ch <-chan []byte content []byte
cancel context.CancelFunc
} }
var _ fs.FileReader = (*sensorFileReadHandle)(nil) var _ fs.FileReader = (*sensorFileReadHandle)(nil)
func (fh *sensorFileReadHandle) Read(ctx context.Context, dest []byte, off int64) (fuse.ReadResult, syscall.Errno) { func (fh *sensorFileReadHandle) Read(ctx context.Context, dest []byte, off int64) (fuse.ReadResult, syscall.Errno) {
content := <-fh.ch log.Info("Executing Read").Int("size", len(fh.content)).Send()
return fuse.ReadResultData(content), 0 end := off + int64(len(dest))
if end > int64(len(fh.content)) {
end = int64(len(fh.content))
}
return fuse.ReadResultData(fh.content[off:end]), 0
} }
var _ fs.FileFlusher = (*sensorFileReadHandle)(nil) var _ fs.FileFlusher = (*sensorFileReadHandle)(nil)
func (fh *sensorFileReadHandle) Flush(ctx context.Context) (errno syscall.Errno) { func (fh *sensorFileReadHandle) Flush(ctx context.Context) (errno syscall.Errno) {
fh.cancel()
return 0 return 0
} }
@ -428,15 +430,13 @@ func (f *ITNode) Open(ctx context.Context, openFlags uint32) (fh fs.FileHandle,
for _, value := range properties { for _, value := range properties {
if value.Ino == f.Ino { if value.Ino == f.Ino {
sub_ctx, cancel := context.WithCancel(ctx) ans, err := value.gen()
ans, err := value.gen(sub_ctx)
if err != nil { if err != nil {
return nil, 0, syscallErr(err) return nil, 0, syscallErr(err)
} }
fh = &sensorFileReadHandle{ fh = &sensorFileReadHandle{
ch: ans, content : ans,
cancel : cancel,
} }
return fh, fuse.FOPEN_DIRECT_IO, 0 return fh, fuse.FOPEN_DIRECT_IO, 0
} }