From 820a2107400a830ba9baa2a7c8c2340033fd6a09 Mon Sep 17 00:00:00 2001 From: dantecatalfamo Date: Mon, 21 Oct 2024 12:23:23 -0400 Subject: [PATCH 1/3] Catch signals and call systray.Quit() for graceful exit --- orbit/cmd/desktop/desktop.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/orbit/cmd/desktop/desktop.go b/orbit/cmd/desktop/desktop.go index f0f1a5b2cf85..f735ac06c548 100644 --- a/orbit/cmd/desktop/desktop.go +++ b/orbit/cmd/desktop/desktop.go @@ -6,8 +6,10 @@ import ( "errors" "fmt" "os" + "os/signal" "path/filepath" "runtime" + "syscall" "time" "fyne.io/systray" @@ -449,6 +451,21 @@ func main() { cancelOfflineWatcherCtx() } + sigChan := make(chan os.Signal, 1) + signal.Notify( + sigChan, + syscall.SIGINT, + syscall.SIGTERM, + syscall.SIGQUIT, + ) + + // Catch signals and exit gracefully + go func() { + s := <-sigChan + log.Info().Stringer("signal", s).Msg("Caught signal, exiting") + systray.Quit() + }() + systray.Run(onReady, onExit) } From 5c29e4af420f28dd6e36e8322c0d378daad6b877 Mon Sep 17 00:00:00 2001 From: dantecatalfamo Date: Mon, 21 Oct 2024 14:39:22 -0400 Subject: [PATCH 2/3] Add changes/ --- changes/21256-fleet-desktop-trap | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/21256-fleet-desktop-trap diff --git a/changes/21256-fleet-desktop-trap b/changes/21256-fleet-desktop-trap new file mode 100644 index 000000000000..707b46505f80 --- /dev/null +++ b/changes/21256-fleet-desktop-trap @@ -0,0 +1 @@ +- Gracefully shutdown fleet desktop when receiving interrupt and terminate signals From bbb1507b3199ea382860153cf42148b02fb059ae Mon Sep 17 00:00:00 2001 From: dantecatalfamo Date: Tue, 22 Oct 2024 15:26:09 -0400 Subject: [PATCH 3/3] Make sure we don't hang on baseDialog not listening --- orbit/cmd/desktop/desktop.go | 6 +++++- orbit/pkg/useraction/mdm_migration_darwin.go | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/orbit/cmd/desktop/desktop.go b/orbit/cmd/desktop/desktop.go index f735ac06c548..8234ed337b2a 100644 --- a/orbit/cmd/desktop/desktop.go +++ b/orbit/cmd/desktop/desktop.go @@ -440,14 +440,18 @@ func main() { // FIXME: it doesn't look like this is actually triggering, at least when desktop gets // killed (https://github.com/fleetdm/fleet/issues/21256) onExit := func() { - log.Info().Msg("exit") + log.Info().Msg("exiting") if mdmMigrator != nil { + log.Debug().Err(err).Msg("exiting mdmMigrator") mdmMigrator.Exit() } if swiftDialogCh != nil { + log.Debug().Err(err).Msg("exiting swiftDialogCh") close(swiftDialogCh) } + log.Debug().Msg("stopping ticker") summaryTicker.Stop() + log.Debug().Msg("canceling offline watcher ctx") cancelOfflineWatcherCtx() } diff --git a/orbit/pkg/useraction/mdm_migration_darwin.go b/orbit/pkg/useraction/mdm_migration_darwin.go index d835dad2d6bf..9e2ba90042be 100644 --- a/orbit/pkg/useraction/mdm_migration_darwin.go +++ b/orbit/pkg/useraction/mdm_migration_darwin.go @@ -102,7 +102,7 @@ type baseDialog struct { } func newBaseDialog(path string) *baseDialog { - return &baseDialog{path: path, interruptCh: make(chan struct{})} + return &baseDialog{path: path, interruptCh: make(chan struct{}, 1)} } func (b *baseDialog) CanRun() bool {