提交 3c4ab3f5 编写于 作者: B Bruce Momjian

Exit backend from SIGTERM or FATAL by simulating client EOF, rather than

calling proc_exit() directly.  This should make SIGTERM more reliable.
上级 1934055c
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.398 2004/04/07 05:05:49 momjian Exp $ * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.399 2004/04/11 00:54:44 momjian Exp $
* *
* NOTES * NOTES
* this is the "main" module of the postgres backend and * this is the "main" module of the postgres backend and
...@@ -2938,7 +2938,10 @@ PostgresMain(int argc, char *argv[], const char *username) ...@@ -2938,7 +2938,10 @@ PostgresMain(int argc, char *argv[], const char *username)
/* /*
* (3) read a command (loop blocks here) * (3) read a command (loop blocks here)
*/ */
firstchar = ReadCommand(&input_message); if (!in_fatal_exit)
firstchar = ReadCommand(&input_message);
else
firstchar = EOF;
/* /*
* (4) disable async signal conditions again. * (4) disable async signal conditions again.
...@@ -3170,7 +3173,8 @@ PostgresMain(int argc, char *argv[], const char *username) ...@@ -3170,7 +3173,8 @@ PostgresMain(int argc, char *argv[], const char *username)
* Otherwise it will fail to be called during other * Otherwise it will fail to be called during other
* backend-shutdown scenarios. * backend-shutdown scenarios.
*/ */
proc_exit(0); proc_exit(!in_fatal_exit ? 0 : proc_exit_inprogress ||
!IsUnderPostmaster);
case 'd': /* copy data */ case 'd': /* copy data */
case 'c': /* copy done */ case 'c': /* copy done */
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.132 2004/04/05 03:02:06 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.133 2004/04/11 00:54:45 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -72,6 +72,8 @@ PGErrorVerbosity Log_error_verbosity = PGERROR_VERBOSE; ...@@ -72,6 +72,8 @@ PGErrorVerbosity Log_error_verbosity = PGERROR_VERBOSE;
char *Log_line_prefix = NULL; /* format for extra log line info */ char *Log_line_prefix = NULL; /* format for extra log line info */
unsigned int Log_destination; unsigned int Log_destination;
bool in_fatal_exit = false;
#ifdef HAVE_SYSLOG #ifdef HAVE_SYSLOG
char *Syslog_facility; /* openlog() parameters */ char *Syslog_facility; /* openlog() parameters */
char *Syslog_ident; char *Syslog_ident;
...@@ -442,7 +444,12 @@ errfinish(int dummy,...) ...@@ -442,7 +444,12 @@ errfinish(int dummy,...)
*/ */
fflush(stdout); fflush(stdout);
fflush(stderr); fflush(stderr);
proc_exit(proc_exit_inprogress || !IsUnderPostmaster);
if (in_fatal_exit)
ereport(PANIC, (errmsg("fatal error during fatal exit, giving up")));
/* We will exit the backend by simulating a client EOF */
in_fatal_exit = true;
} }
/* /*
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/tcop/tcopprot.h,v 1.64 2004/04/07 05:05:50 momjian Exp $ * $PostgreSQL: pgsql/src/include/tcop/tcopprot.h,v 1.65 2004/04/11 00:54:45 momjian Exp $
* *
* OLD COMMENTS * OLD COMMENTS
* This file was created so that other c files could get the two * This file was created so that other c files could get the two
...@@ -34,6 +34,7 @@ extern bool log_hostname; ...@@ -34,6 +34,7 @@ extern bool log_hostname;
extern DLLIMPORT const char *debug_query_string; extern DLLIMPORT const char *debug_query_string;
extern char *rendezvous_name; extern char *rendezvous_name;
extern int max_stack_depth; extern int max_stack_depth;
extern bool in_fatal_exit;
/* GUC-configurable parameters */ /* GUC-configurable parameters */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册