From fc89e97af73677b94aed06659361f8719fe9d77e Mon Sep 17 00:00:00 2001 From: Jaehoon Kim Date: Wed, 1 Oct 2025 11:09:39 +0900 Subject: [PATCH] FUSE Mount: resolve memory leak in Read method goroutine (#7270) (#7282) * Add defer cancelFunc() to ensure context is always cancelled * Add ctx.Done() case in goroutine select to prevent goroutine leak * Fixes memory accumulation issue where goroutines were not properly cleaned up --- weed/mount/weedfs_file_read.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/weed/mount/weedfs_file_read.go b/weed/mount/weedfs_file_read.go index dc79d3dc7..5a5a5efab 100644 --- a/weed/mount/weedfs_file_read.go +++ b/weed/mount/weedfs_file_read.go @@ -49,10 +49,14 @@ func (wfs *WFS) Read(cancel <-chan struct{}, in *fuse.ReadIn, buff []byte) (fuse // Create a context that will be cancelled when the cancel channel receives a signal ctx, cancelFunc := context.WithCancel(context.Background()) + defer cancelFunc() + go func() { select { case <-cancel: cancelFunc() + case <-ctx.Done(): + // Context already cancelled, exit goroutine } }()