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")));
    }