From 33228ee5897341e1e6413858d182ad6442be9fbd Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Fri, 22 Jan 2021 19:37:17 +0800 Subject: [PATCH] TD-1207 --- src/dnode/src/dnodeSystem.c | 16 ++++++++++------ src/kit/shell/src/shellMain.c | 2 +- src/os/inc/osSignal.h | 2 +- src/os/src/detail/osSignal.c | 6 ++++++ src/os/src/windows/wSignal.c | 4 +++- src/sync/src/syncArbitrator.c | 4 ++-- tests/tsim/src/simMain.c | 2 +- 7 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/dnode/src/dnodeSystem.c b/src/dnode/src/dnodeSystem.c index b7ca6f053c..ad5950ab5b 100644 --- a/src/dnode/src/dnodeSystem.c +++ b/src/dnode/src/dnodeSystem.c @@ -20,9 +20,9 @@ #include "dnodeMain.h" static tsem_t exitSem; -static void siguser1Handler(int32_t signum); -static void siguser2Handler(int32_t signum); -static void sigintHandler(int32_t signum); +static void siguser1Handler(int32_t signum, void *sigInfo, void *context); +static void siguser2Handler(int32_t signum, void *sigInfo, void *context); +static void sigintHandler(int32_t signum, void *sigInfo, void *context); int32_t main(int32_t argc, char *argv[]) { int dump_config = 0; @@ -152,11 +152,11 @@ int32_t main(int32_t argc, char *argv[]) { return EXIT_SUCCESS; } -static void siguser1Handler(int32_t signum) { taosCfgDynamicOptions("debugFlag 143"); } +static void siguser1Handler(int32_t signum, void *sigInfo, void *context) { taosCfgDynamicOptions("debugFlag 143"); } -static void siguser2Handler(int32_t signum) { taosCfgDynamicOptions("resetlog"); } +static void siguser2Handler(int32_t signum, void *sigInfo, void *context) { taosCfgDynamicOptions("resetlog"); } -static void sigintHandler(int32_t signum) { +static void sigintHandler(int32_t signum, void *sigInfo, void *context) { // protect the application from receive another signal taosIgnSignal(SIGUSR1); taosIgnSignal(SIGUSR2); @@ -169,6 +169,10 @@ static void sigintHandler(int32_t signum) { // clean the system. dInfo("shut down signal is %d", signum); +#ifndef WINDOWS + dInfo("sender PID:%d cmdline:%s",((siginfo_t *)sigInfo)->si_pid, taosGetCmdlineByPID(sigInfo->si_pid)); +#endif + syslog(LOG_INFO, "Shut down signal is %d", signum); syslog(LOG_INFO, "Shutting down TDengine service..."); diff --git a/src/kit/shell/src/shellMain.c b/src/kit/shell/src/shellMain.c index c7a0dab2dd..49de42796c 100644 --- a/src/kit/shell/src/shellMain.c +++ b/src/kit/shell/src/shellMain.c @@ -21,7 +21,7 @@ pthread_t pid; static tsem_t cancelSem; -void shellQueryInterruptHandler(int32_t signum) { +void shellQueryInterruptHandler(int32_t signum, void *sigInfo, void *context) { tsem_post(&cancelSem); } diff --git a/src/os/inc/osSignal.h b/src/os/inc/osSignal.h index 8016c49ba8..c13cd83178 100644 --- a/src/os/inc/osSignal.h +++ b/src/os/inc/osSignal.h @@ -48,7 +48,7 @@ extern "C" { #define SIGBREAK 1234 #endif -typedef void (*FSignalHandler)(int32_t signum); +typedef void (*FSignalHandler)(int32_t signum, void *sigInfo, void *context); void taosSetSignal(int32_t signum, FSignalHandler sigfp); void taosIgnSignal(int32_t signum); void taosDflSignal(int32_t signum); diff --git a/src/os/src/detail/osSignal.c b/src/os/src/detail/osSignal.c index c97a3343de..e1a0e84e7f 100644 --- a/src/os/src/detail/osSignal.c +++ b/src/os/src/detail/osSignal.c @@ -20,10 +20,16 @@ #include "tulog.h" #ifndef TAOS_OS_FUNC_SIGNAL +typedef void (*FLinuxSignalHandler)(int32_t signum, siginfo_t *sigInfo, void *context); void taosSetSignal(int32_t signum, FSignalHandler sigfp) { struct sigaction act = {{0}}; +#if 1 + act.sa_flags = SA_SIGINFO; + act.sa_sigaction = (FLinuxSignalHandler)sigfp; +#else act.sa_handler = sigfp; +#endif sigaction(signum, &act, NULL); } diff --git a/src/os/src/windows/wSignal.c b/src/os/src/windows/wSignal.c index 3988f0c6e1..9de6b5f343 100644 --- a/src/os/src/windows/wSignal.c +++ b/src/os/src/windows/wSignal.c @@ -18,6 +18,8 @@ #include #include +typedef void (*FWinSignalHandler)(int32_t signum); + void taosSetSignal(int32_t signum, FSignalHandler sigfp) { if (signum == SIGUSR1) return; @@ -25,7 +27,7 @@ void taosSetSignal(int32_t signum, FSignalHandler sigfp) { if (signum == SIGHUP) { SetConsoleCtrlHandler((PHANDLER_ROUTINE)sigfp, TRUE); } else { - signal(signum, sigfp); + signal(signum, (FWinSignalHandler)sigfp); } } diff --git a/src/sync/src/syncArbitrator.c b/src/sync/src/syncArbitrator.c index d65a7b3043..24760ce1a0 100644 --- a/src/sync/src/syncArbitrator.c +++ b/src/sync/src/syncArbitrator.c @@ -27,7 +27,7 @@ #include "syncInt.h" #include "syncTcp.h" -static void arbSignalHandler(int32_t signum); +static void arbSignalHandler(int32_t signum, void *sigInfo, void *context); static void arbProcessIncommingConnection(int32_t connFd, uint32_t sourceIp); static void arbProcessBrokenLink(int64_t rid); static int32_t arbProcessPeerMsg(int64_t rid, void *buffer); @@ -170,7 +170,7 @@ static int32_t arbProcessPeerMsg(int64_t rid, void *buffer) { return 0; } -static void arbSignalHandler(int32_t signum) { +static void arbSignalHandler(int32_t signum, void *sigInfo, void *context) { taosIgnSignal(SIGTERM); taosIgnSignal(SIGINT); taosIgnSignal(SIGABRT); diff --git a/tests/tsim/src/simMain.c b/tests/tsim/src/simMain.c index 251b4f80bb..990ea71413 100644 --- a/tests/tsim/src/simMain.c +++ b/tests/tsim/src/simMain.c @@ -22,7 +22,7 @@ bool simAsyncQuery = false; bool simExecSuccess = false; -void simHandleSignal(int32_t signo) { +void simHandleSignal(int32_t signo, void *sigInfo, void *context) { simSystemCleanUp(); exit(1); } -- GitLab