Tweak postmaster code to avoid double reporting when bgwriter crashes.
This commit is contained in:
parent
5cc38649d4
commit
bb892cecf9
@ -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,12 +2115,12 @@ 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")));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user