From 74733b24c971a006c03e6d413a1ee71102c499d7 Mon Sep 17 00:00:00 2001 From: "Kali Kaneko (leap communications)" Date: Thu, 5 Sep 2019 01:16:17 +0200 Subject: [bug] exit cleanly in osx two things happen differently in osx: - call to systray.Quit() halts the program (so if called directly, none of the deferred functions that we use for cleanup get to execute) - systray.Run() blocks (so after loop returns, the main run.Run() function did not get to receive the boolean through the finishedCh channel. proper shutdown is therefore fixed here by moving the call to systray.Quit() to a goroutine that executes when the initialize() function calls all the deferred functions. we need to revisit this in case we want to break the main select loop for a reson other than successfully terminating the program. --- pkg/systray/run.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'pkg/systray/run.go') diff --git a/pkg/systray/run.go b/pkg/systray/run.go index 6521da6..5764b36 100644 --- a/pkg/systray/run.go +++ b/pkg/systray/run.go @@ -27,8 +27,13 @@ func Run(conf *Config) { bt := bmTray{conf: conf, waitCh: make(chan bool)} finishedCh := make(chan bool) go initialize(conf, &bt, finishedCh) + go func() { + <-finishedCh + /* in osx, systray.Quit() halts the program */ + bt.quit() + os.Exit(0) + }() bt.start() - <-finishedCh } func initialize(conf *Config, bt *bmTray, finishedCh chan bool) { -- cgit v1.2.3