From b2e04c53622a0c709505d778224286b482855304 Mon Sep 17 00:00:00 2001
From: Ming Deng <mindeng@ebay.com>
Date: Sun, 24 Nov 2019 17:31:01 +0800
Subject: [PATCH] Define DumpHeapSingals on different platforms

---
 config/graceful_shutdown.go                | 21 ++++++++++-----------
 config/graceful_shutdown_signal_unix.go    |  3 +++
 config/graceful_shutdown_signal_windows.go |  2 ++
 3 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/config/graceful_shutdown.go b/config/graceful_shutdown.go
index 1119c3a53..fedb2c15e 100644
--- a/config/graceful_shutdown.go
+++ b/config/graceful_shutdown.go
@@ -21,7 +21,6 @@ import (
 	"os"
 	"os/signal"
 	"runtime/debug"
-	"syscall"
 	"time"
 )
 
@@ -66,18 +65,18 @@ func GracefulShutdownInit() {
 			// gracefulShutdownOnce.Do(func() {
 			BeforeShutdown()
 
-			switch sig {
 			// those signals' original behavior is exit with dump ths stack, so we try to keep the behavior
-			// syscall.SIGSYS will be ignored. It's not supported in windows platform.
-			case syscall.SIGQUIT, syscall.SIGILL, syscall.SIGTRAP,
-				syscall.SIGABRT:
-				debug.WriteHeapDump(os.Stdout.Fd())
-			default:
-				time.AfterFunc(totalTimeout(), func() {
-					logger.Warn("Shutdown gracefully timeout, application will shutdown immediately. ")
-					os.Exit(0)
-				})
+			for _, dumpSignal := range DumpHeapShutdownSignals {
+				if sig == dumpSignal {
+					debug.WriteHeapDump(os.Stdout.Fd())
+				}
 			}
+
+			time.AfterFunc(totalTimeout(), func() {
+				logger.Warn("Shutdown gracefully timeout, application will shutdown immediately. ")
+				os.Exit(0)
+			})
+
 			os.Exit(0)
 		}
 	}()
diff --git a/config/graceful_shutdown_signal_unix.go b/config/graceful_shutdown_signal_unix.go
index 6333a0022..59c1a5d14 100644
--- a/config/graceful_shutdown_signal_unix.go
+++ b/config/graceful_shutdown_signal_unix.go
@@ -25,3 +25,6 @@ import (
 var ShutdownSignals = []os.Signal{os.Interrupt, os.Kill, syscall.SIGKILL, syscall.SIGSTOP,
 	syscall.SIGHUP, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGILL, syscall.SIGTRAP,
 	syscall.SIGABRT, syscall.SIGSYS}
+
+var DumpHeapShutdownSignals = []os.Signal{syscall.SIGQUIT, syscall.SIGILL,
+	syscall.SIGTRAP, syscall.SIGABRT, syscall.SIGSYS}
diff --git a/config/graceful_shutdown_signal_windows.go b/config/graceful_shutdown_signal_windows.go
index ff7a48113..91b2bce7c 100644
--- a/config/graceful_shutdown_signal_windows.go
+++ b/config/graceful_shutdown_signal_windows.go
@@ -25,3 +25,5 @@ import (
 var ShutdownSignals = []os.Signal{os.Interrupt, os.Kill, syscall.SIGKILL,
 	syscall.SIGHUP, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGILL, syscall.SIGTRAP,
 	syscall.SIGABRT}
+
+var DumpHeapShutdownSignals = []os.Signal{syscall.SIGQUIT, syscall.SIGILL, syscall.SIGTRAP, syscall.SIGABRT}
-- 
GitLab