diff --git a/fuse.go b/fuse.go index 17cb865..9c128f0 100644 --- a/fuse.go +++ b/fuse.go @@ -248,6 +248,7 @@ func (fh *bytesFileReadHandle) Read(ctx context.Context, dest []byte, off int64) type sensorFileReadHandle struct { ch <-chan uint8 + cancel context.CancelFunc } var _ = (fs.FileReader)((*sensorFileReadHandle)(nil)) func (fh *sensorFileReadHandle) Read(ctx context.Context, dest []byte, off int64) (fuse.ReadResult, syscall.Errno) { @@ -256,6 +257,12 @@ func (fh *sensorFileReadHandle) Read(ctx context.Context, dest []byte, off int64 return fuse.ReadResultData(content), 0 } +var _ = (fs.FileFlusher)((*sensorFileReadHandle)(nil)) +func (fh *sensorFileReadHandle) Flush(ctx context.Context) (errno syscall.Errno) { + fh.cancel() + return 0 +} + type bytesFileWriteHandle struct { content []byte @@ -395,13 +402,15 @@ func (f *ITNode) Open(ctx context.Context, openFlags uint32) (fh fs.FileHandle, for _, value := range properties { if value.Ino == f.Ino { - ans, err := value.gen(ctx) + sub_ctx, cancel := context.WithCancel(ctx) + ans, err := value.gen(sub_ctx) if err != nil { return nil, 0, syscall.EROFS } fh = &sensorFileReadHandle{ ch: ans, + cancel : cancel, } return fh, fuse.FOPEN_DIRECT_IO, 0 }