mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
Exit backend from SIGTERM or FATAL by simulating client EOF, rather than
calling proc_exit() directly. This should make SIGTERM more reliable.
This commit is contained in:
@ -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)
|
|||||||
/*
|
/*
|
||||||
* (3) read a command (loop blocks here)
|
* (3) read a command (loop blocks here)
|
||||||
*/
|
*/
|
||||||
|
if (!in_fatal_exit)
|
||||||
firstchar = ReadCommand(&input_message);
|
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)
|
|||||||
* 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 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* 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;
|
|||||||
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,...)
|
|||||||
*/
|
*/
|
||||||
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 @@
|
|||||||
* 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;
|
|||||||
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 */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user