From 845f98e771d6b667cb8e6fc9d381a884bb64074b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?okhowang=28=E7=8E=8B=E6=B2=9B=E6=96=87=29?= Date: Tue, 30 Dec 2025 15:54:56 +0800 Subject: [PATCH] fix: FuseServerService.CreateFuseServer don't block forever when FuseServer.Run failed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: okhowang(王沛文) --- domain/fuse.go | 2 +- fuse/server.go | 6 ++++-- fuse/service.go | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/domain/fuse.go b/domain/fuse.go index 66abc55..692bb2d 100644 --- a/domain/fuse.go +++ b/domain/fuse.go @@ -35,7 +35,7 @@ type FuseServerIface interface { Destroy() error MountPoint() string Unmount() - InitWait() + InitWait() bool SetCntrRegComplete() IsCntrRegCompleted() bool } diff --git a/fuse/server.go b/fuse/server.go index 76984d5..c4804f1 100644 --- a/fuse/server.go +++ b/fuse/server.go @@ -120,6 +120,7 @@ func (s *fuseServer) Create() error { } func (s *fuseServer) Run() error { + defer close(s.initDone) // // Creating a FUSE mount at the associated mountpoint. // @@ -202,8 +203,9 @@ func (s *fuseServer) Root() (bfusefs.Node, error) { // Ensure that fuse-server initialization is completed before moving on // with sys container's pre-registration sequence. -func (s *fuseServer) InitWait() { - <-s.initDone +func (s *fuseServer) InitWait() bool { + _, ok := <-s.initDone + return ok } func (s *fuseServer) MountPoint() string { diff --git a/fuse/service.go b/fuse/service.go index cd2dbba..edd2972 100644 --- a/fuse/service.go +++ b/fuse/service.go @@ -123,7 +123,9 @@ func (fss *FuseServerService) CreateFuseServer(serveCntr, stateCntr domain.Conta // Launch fuse-server in a separate goroutine and wait for 'ack' before // moving on. go srv.Run() - srv.InitWait() + if !srv.InitWait() { + return errors.New("FuseServer InitWait error") + } // Store newly created fuse-server. fss.Lock()