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