]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
postmaster: Don't open-code TerminateChildren() in HandleChildCrash()
authorAndres Freund <andres@anarazel.de>
Fri, 24 Jan 2025 22:00:10 +0000 (17:00 -0500)
committerAndres Freund <andres@anarazel.de>
Fri, 24 Jan 2025 22:00:10 +0000 (17:00 -0500)
After removing the duplication no user of sigquit_child() remains, therefore
remove it.

Reviewed-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Discussion: https://postgr.es/m/kgng5nrvnlv335evmsuvpnh354rw7qyazl73kdysev2cr2v5zu@m3cfzxicm5kp

src/backend/postmaster/postmaster.c

index 5488289a489bbba4fa9866a3ec605a95cb99c905..ea92fb56c80a2739b1173f7380de6b31ea86bbd1 100644 (file)
@@ -243,6 +243,13 @@ bool               enable_bonjour = false;
 char      *bonjour_name;
 bool           restart_after_crash = true;
 bool           remove_temp_files_after_crash = true;
+
+/*
+ * When terminating child processes after fatal errors, like a crash of a
+ * child process, we normally send SIGQUIT -- and most other comments in this
+ * file are written on the assumption that we do -- but developers might
+ * prefer to use SIGABRT to collect per-child core dumps.
+ */
 bool           send_abort_for_crash = false;
 bool           send_abort_for_kill = false;
 
@@ -424,7 +431,6 @@ static int  BackendStartup(ClientSocket *client_sock);
 static void report_fork_failure_to_client(ClientSocket *client_sock, int errnum);
 static CAC_state canAcceptConnections(BackendType backend_type);
 static void signal_child(PMChild *pmchild, int signal);
-static void sigquit_child(PMChild *pmchild);
 static bool SignalChildren(int signal, BackendTypeMask targetMask);
 static void TerminateChildren(int signal);
 static int     CountChildren(BackendTypeMask targetMask);
@@ -2701,32 +2707,12 @@ HandleChildCrash(int pid, int exitstatus, const char *procname)
        /*
         * Signal all other child processes to exit.  The crashed process has
         * already been removed from ActiveChildList.
+        *
+        * We could exclude dead-end children here, but at least when sending
+        * SIGABRT it seems better to include them.
         */
        if (take_action)
-       {
-               dlist_iter      iter;
-
-               dlist_foreach(iter, &ActiveChildList)
-               {
-                       PMChild    *bp = dlist_container(PMChild, elem, iter.cur);
-
-                       /* We do NOT restart the syslogger */
-                       if (bp == SysLoggerPMChild)
-                               continue;
-
-                       if (bp == StartupPMChild)
-                               StartupStatus = STARTUP_SIGNALED;
-
-                       /*
-                        * This backend is still alive.  Unless we did so already, tell it
-                        * to commit hara-kiri.
-                        *
-                        * We could exclude dead-end children here, but at least when
-                        * sending SIGABRT it seems better to include them.
-                        */
-                       sigquit_child(bp);
-               }
-       }
+               TerminateChildren(send_abort_for_crash ? SIGABRT : SIGQUIT);
 
        if (Shutdown != ImmediateShutdown)
                FatalError = true;
@@ -3349,19 +3335,6 @@ signal_child(PMChild *pmchild, int signal)
 #endif
 }
 
-/*
- * Convenience function for killing a child process after a crash of some
- * other child process.  We apply send_abort_for_crash to decide which signal
- * to send.  Normally it's SIGQUIT -- and most other comments in this file are
- * written on the assumption that it is -- but developers might prefer to use
- * SIGABRT to collect per-child core dumps.
- */
-static void
-sigquit_child(PMChild *pmchild)
-{
-       signal_child(pmchild, (send_abort_for_crash ? SIGABRT : SIGQUIT));
-}
-
 /*
  * Send a signal to the targeted children.
  */