From 9f2ea93a7ea4994be5114c0ce30bbd9b5539ee81 Mon Sep 17 00:00:00 2001 From: euforia Date: Sun, 15 Nov 2015 15:42:26 -0800 Subject: [PATCH] Fix go1.4.2 signal handling --- go/weed/signal_handling.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/go/weed/signal_handling.go b/go/weed/signal_handling.go index 2004bb088..39cda4f7a 100644 --- a/go/weed/signal_handling.go +++ b/go/weed/signal_handling.go @@ -9,10 +9,13 @@ import ( ) func OnInterrupt(fn func()) { - // deal with control+c,etc + // Deal with control+c,etc + + // Controlling terminal close, daemon not exit + ignoreChan := make(chan os.Signal, 1) + signal.Notify(ignoreChan, syscall.SIGHUP) + signalChan := make(chan os.Signal, 1) - // controlling terminal close, daemon not exit - signal.Ignore(syscall.SIGHUP) signal.Notify(signalChan, os.Interrupt, os.Kill, @@ -21,10 +24,18 @@ func OnInterrupt(fn func()) { syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) + go func() { - for _ = range signalChan { - fn() - os.Exit(0) + for { + select { + case <-signalChan: + fn() + os.Exit(0) + + case <-ignoreChan: + // Ignore + break + } } }() }