From d72dc6d769d4d6b20a6f2fd593fcbb9266c0f022 Mon Sep 17 00:00:00 2001 From: Massaki Archambault Date: Sun, 21 Mar 2021 21:45:59 -0400 Subject: [PATCH] handle SIGINT and SIGTERM --- fs/root.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/fs/root.go b/fs/root.go index 2d2b713..9c03336 100644 --- a/fs/root.go +++ b/fs/root.go @@ -3,6 +3,9 @@ package fs import ( "context" "fmt" + "os" + "os/signal" + "syscall" "github.com/badjware/gitlabfs/git" "github.com/badjware/gitlabfs/gitlab" @@ -86,6 +89,11 @@ func Start(mountpoint string, rootGroupIds []int, userIds []int, param *FSParam, if err != nil { return fmt.Errorf("mount failed: %v", err) } + + signalChan := make(chan os.Signal) + go signalHandler(signalChan, server) + signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM) + server.Serve() return nil @@ -98,3 +106,14 @@ func staticInoGenerator(staticInoChan chan<- uint64) { i++ } } + +func signalHandler(signalChan <-chan os.Signal, server *fuse.Server) { + for { + s := <-signalChan + fmt.Printf("Caught %v: stopping\n", s) + err := server.Unmount() + if err != nil { + fmt.Printf("Failed to unmount: %v\n", err) + } + } +}