提交 bb892cec 编写于 作者: T Tom Lane

Tweak postmaster code to avoid double reporting when bgwriter crashes.

上级 5cc38649
......@@ -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")));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册