Tweak postmaster code to avoid double reporting when bgwriter crashes.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 4 Aug 2004 20:09:47 +0000 (20:09 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 4 Aug 2004 20:09:47 +0000 (20:09 +0000)
src/backend/postmaster/postmaster.c

index c3123b69015a1a761f8e64c16cecd0728f94195f..6c9e87f5f3a56baedb7c63ffea3f3b6355581f78 100644 (file)
@@ -37,7 +37,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.418 2004/08/01 17:45:43 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.419 2004/08/04 20:09:47 tgl Exp $
  *
  * NOTES
  *
@@ -248,8 +248,8 @@ static void pmdie(SIGNAL_ARGS);
 static void reaper(SIGNAL_ARGS);
 static void sigusr1_handler(SIGNAL_ARGS);
 static void dummy_handler(SIGNAL_ARGS);
-static void CleanupProc(int pid, int exitstatus);
-static void HandleChildCrash(int pid, int exitstatus);
+static void CleanupBackend(int pid, int exitstatus);
+static void HandleChildCrash(int pid, int exitstatus, const char *procname);
 static void LogChildExit(int lev, const char *procname,
                         int pid, int exitstatus);
 static int     BackendRun(Port *port);
@@ -1947,7 +1947,7 @@ reaper(SIGNAL_ARGS)
        while ((pid = win32_waitpid(&exitstatus)) > 0)
        {
                /*
-                * We need to do this here, and not in CleanupProc, since this is
+                * We need to do this here, and not in CleanupBackend, since this is
                 * to be called on all children when we are done with them. Could
                 * move to LogChildExit, but that seems like asking for future
                 * trouble...
@@ -2025,9 +2025,8 @@ reaper(SIGNAL_ARGS)
                        /*
                         * Any unexpected exit of the bgwriter is treated as a crash.
                         */
-                       LogChildExit(LOG, gettext("background writer process"),
-                                                pid, exitstatus);
-                       HandleChildCrash(pid, exitstatus);
+                       HandleChildCrash(pid, exitstatus,
+                                                        gettext("background writer process"));
                        continue;
                }
 
@@ -2067,7 +2066,7 @@ reaper(SIGNAL_ARGS)
                /*
                 * Else do standard backend child cleanup.
                 */
-               CleanupProc(pid, exitstatus);
+               CleanupBackend(pid, exitstatus);
        }                                                       /* loop over pending child-death reports */
 
        if (FatalError)
@@ -2116,13 +2115,13 @@ reaper_done:
 
 
 /*
- * CleanupProc -- cleanup after terminated backend.
+ * CleanupBackend -- cleanup after terminated backend.
  *
  * Remove all local state associated with backend.
  */
 static void
-CleanupProc(int pid,
-                       int exitstatus)         /* child's exit status. */
+CleanupBackend(int pid,
+                          int exitstatus)              /* child's exit status. */
 {
        Dlelem     *curr;
 
@@ -2136,7 +2135,7 @@ CleanupProc(int pid,
         */
        if (exitstatus != 0)
        {
-               HandleChildCrash(pid, exitstatus);
+               HandleChildCrash(pid, exitstatus, gettext("server process"));
                return;
        }
 
@@ -2166,8 +2165,7 @@ CleanupProc(int pid,
  * process, and to signal all other remaining children to quickdie.
  */
 static void
-HandleChildCrash(int pid,
-                                int exitstatus) /* child's exit status. */
+HandleChildCrash(int pid, int exitstatus, const char *procname)
 {
        Dlelem     *curr,
                           *next;
@@ -2179,11 +2177,7 @@ HandleChildCrash(int pid,
         */
        if (!FatalError)
        {
-               LogChildExit(LOG,
-                                        (pid == BgWriterPID) ?
-                                        gettext("background writer process") :
-                                        gettext("server process"),
-                                        pid, exitstatus);
+               LogChildExit(LOG, procname, pid, exitstatus);
                ereport(LOG,
                                (errmsg("terminating any other active server processes")));
        }