Enhance SIGHLD handler of Pgpool-II main process.
authorTatsuo Ishii <ishii@sraoss.co.jp>
Sun, 24 Oct 2021 07:22:33 +0000 (16:22 +0900)
committerTatsuo Ishii <ishii@sraoss.co.jp>
Sun, 24 Oct 2021 07:38:43 +0000 (16:38 +0900)
When Pgpool-II child is killed by SIGKILL signal, the SIGHLD handler
just emitted LOG level message as other signals.  But SIGKILL is an
important event, for example killed by OOM killer. So emit a WARNING
level message instead.

Per suggestion from Michail Alexakis.
Discussion: https://www.pgpool.net/pipermail/pgpool-general/2021-October/007808.html

src/main/pgpool_main.c

index feb375332a37dfc8bf9526d79174ff625c183f5a..7a14f31c209497701d484915977ba1f7e52854aa 100644 (file)
@@ -2465,10 +2465,13 @@ static void reaper(void)
                }
                if (WIFSIGNALED(status))
                {
-                       /* Child terminated by segmentation fault. Report it */
-                       if(WTERMSIG(status) == SIGSEGV)
+                       /* Child terminated by segmentation fault or sigkill. Report it */
+                       if (WTERMSIG(status) == SIGSEGV)
                                ereport(WARNING,
-                                       (errmsg("%s process with pid: %d was terminated by segmentation fault", exiting_process_name,pid)));
+                                               (errmsg("%s process with pid: %d was terminated by segmentation fault", exiting_process_name, pid)));
+                       else if (WTERMSIG(status) == SIGKILL)
+                               ereport(WARNING,
+                                               (errmsg("%s process with pid: %d was terminated by sigkill", exiting_process_name, pid)));
                        else
                                ereport(LOG,
                                                (errmsg("%s process with pid: %d exits with status %d by signal %d", exiting_process_name, pid, status, WTERMSIG(status))));