5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-26 09:31:38 +00:00

More directly define a minwinsvc exit handler

This commit is contained in:
Neil Alexander 2019-07-06 12:04:31 +01:00
parent 12486b0557
commit 02c99d3e7d
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944

View File

@ -172,7 +172,7 @@ func main() {
logger = log.New(syslogger, "", log.Flags()) logger = log.New(syslogger, "", log.Flags())
} }
default: default:
if logfd, err := os.Create(*logto); err == nil { if logfd, err := os.OpenFile(*logto, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644); err == nil {
logger = log.New(logfd, "", log.Flags()) logger = log.New(logfd, "", log.Flags())
} }
} }
@ -242,11 +242,16 @@ func main() {
r := make(chan os.Signal, 1) r := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM) signal.Notify(c, os.Interrupt, syscall.SIGTERM)
signal.Notify(r, os.Interrupt, syscall.SIGHUP) signal.Notify(r, os.Interrupt, syscall.SIGHUP)
// Create a function to capture the service being stopped on Windows. // Define what happens when we want to stop Yggdrasil.
winTerminate := func() { terminate := func() {
c <- os.Interrupt n.core.Stop()
n.admin.Stop()
n.multicast.Stop()
n.tuntap.Stop()
os.Exit(0)
} }
minwinsvc.SetOnExit(winTerminate) // Capture the service being stopped on Windows.
minwinsvc.SetOnExit(terminate)
// Wait for the terminate/interrupt signal. Once a signal is received, the // Wait for the terminate/interrupt signal. Once a signal is received, the
// deferred Stop function above will run which will shut down TUN/TAP. // deferred Stop function above will run which will shut down TUN/TAP.
for { for {
@ -265,13 +270,7 @@ func main() {
} }
} }
exit: exit:
// When gracefully shutting down we should try and clean up as much as terminate()
// possible, although not all of these functions are necessarily implemented
// yet
n.core.Stop()
n.admin.Stop()
n.multicast.Stop()
n.tuntap.Stop()
} }
func (n *node) sessionFirewall(pubkey *crypto.BoxPubKey, initiator bool) bool { func (n *node) sessionFirewall(pubkey *crypto.BoxPubKey, initiator bool) bool {