diff --git a/pkg/standalone/main.go b/pkg/standalone/main.go index 6c267d6b5113e39c74d224aeb9d2ae8089e56196..4ac577698a0f8315622587ec79e52bbc92a350d3 100644 --- a/pkg/standalone/main.go +++ b/pkg/standalone/main.go @@ -68,6 +68,7 @@ func (b *Bitmask) GetStatusCh() <-chan string { // Close the connection to bitmask func (b *Bitmask) Close() { + log.Printf("Close: cleanup and vpn shutdown...") b.StopVPN() err := b.launch.close() if err != nil { diff --git a/pkg/systray/run.go b/pkg/systray/run.go index 6521da618811ce2d910fd4094fafee6b687a99c9..5764b36736079016d2e2fb2e5072918c952d20b6 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) { diff --git a/pkg/systray/systray.go b/pkg/systray/systray.go index 708ee3bacd0927577f98a579de6abdf6418b4c8f..714852da429cd19d02803aa11fb954621eeaccb7 100644 --- a/pkg/systray/systray.go +++ b/pkg/systray/systray.go @@ -57,6 +57,10 @@ func (bt *bmTray) start() { systray.Run(bt.onReady, bt.onExit) } +func (bt *bmTray) quit() { + systray.Quit() +} + func (bt *bmTray) onExit() { log.Println("Closing systray") } @@ -146,10 +150,10 @@ func (bt *bmTray) loop(bm bitmask.Bitmask, notify *notificator, as bitmask.Autos if err != nil { log.Printf("Error disabling autostart: %v", err) } - systray.Quit() + /* we return and leave bt.quit() to the caller */ return case <-signalCh: - systray.Quit() + /* we return and leave bt.quit() to the caller */ return case <-time.After(5 * time.Second):