Tweak postmaster code to avoid double reporting when bgwriter crashes.

This commit is contained in:
Tom Lane 2004-08-04 20:09:47 +00:00
parent 5cc38649d4
commit bb892cecf9
1 changed files with 13 additions and 19 deletions

View File

@ -37,7 +37,7 @@
* *
* *
* IDENTIFICATION * 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 * NOTES
* *
@ -248,8 +248,8 @@ static void pmdie(SIGNAL_ARGS);
static void reaper(SIGNAL_ARGS); static void reaper(SIGNAL_ARGS);
static void sigusr1_handler(SIGNAL_ARGS); static void sigusr1_handler(SIGNAL_ARGS);
static void dummy_handler(SIGNAL_ARGS); static void dummy_handler(SIGNAL_ARGS);
static void CleanupProc(int pid, int exitstatus); static void CleanupBackend(int pid, int exitstatus);
static void HandleChildCrash(int pid, int exitstatus); static void HandleChildCrash(int pid, int exitstatus, const char *procname);
static void LogChildExit(int lev, const char *procname, static void LogChildExit(int lev, const char *procname,
int pid, int exitstatus); int pid, int exitstatus);
static int BackendRun(Port *port); static int BackendRun(Port *port);
@ -1947,7 +1947,7 @@ reaper(SIGNAL_ARGS)
while ((pid = win32_waitpid(&exitstatus)) > 0) 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 * to be called on all children when we are done with them. Could
* move to LogChildExit, but that seems like asking for future * move to LogChildExit, but that seems like asking for future
* trouble... * trouble...
@ -2025,9 +2025,8 @@ reaper(SIGNAL_ARGS)
/* /*
* Any unexpected exit of the bgwriter is treated as a crash. * Any unexpected exit of the bgwriter is treated as a crash.
*/ */
LogChildExit(LOG, gettext("background writer process"), HandleChildCrash(pid, exitstatus,
pid, exitstatus); gettext("background writer process"));
HandleChildCrash(pid, exitstatus);
continue; continue;
} }
@ -2067,7 +2066,7 @@ reaper(SIGNAL_ARGS)
/* /*
* Else do standard backend child cleanup. * Else do standard backend child cleanup.
*/ */
CleanupProc(pid, exitstatus); CleanupBackend(pid, exitstatus);
} /* loop over pending child-death reports */ } /* loop over pending child-death reports */
if (FatalError) 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. * Remove all local state associated with backend.
*/ */
static void static void
CleanupProc(int pid, CleanupBackend(int pid,
int exitstatus) /* child's exit status. */ int exitstatus) /* child's exit status. */
{ {
Dlelem *curr; Dlelem *curr;
@ -2136,7 +2135,7 @@ CleanupProc(int pid,
*/ */
if (exitstatus != 0) if (exitstatus != 0)
{ {
HandleChildCrash(pid, exitstatus); HandleChildCrash(pid, exitstatus, gettext("server process"));
return; return;
} }
@ -2166,8 +2165,7 @@ CleanupProc(int pid,
* process, and to signal all other remaining children to quickdie. * process, and to signal all other remaining children to quickdie.
*/ */
static void static void
HandleChildCrash(int pid, HandleChildCrash(int pid, int exitstatus, const char *procname)
int exitstatus) /* child's exit status. */
{ {
Dlelem *curr, Dlelem *curr,
*next; *next;
@ -2179,11 +2177,7 @@ HandleChildCrash(int pid,
*/ */
if (!FatalError) if (!FatalError)
{ {
LogChildExit(LOG, LogChildExit(LOG, procname, pid, exitstatus);
(pid == BgWriterPID) ?
gettext("background writer process") :
gettext("server process"),
pid, exitstatus);
ereport(LOG, ereport(LOG,
(errmsg("terminating any other active server processes"))); (errmsg("terminating any other active server processes")));
} }