git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 1934055)
Exit backend from SIGTERM or FATAL by simulating client EOF, rather than
2004年4月11日 00:54:45 +0000 (00:54 +0000)
2004年4月11日 00:54:45 +0000 (00:54 +0000)
calling proc_exit() directly. This should make SIGTERM more reliable.


diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 6cece54b30bd1f729b2fbed8cddd3eab2745ad9a..09fc57b6ea1f095032cb545200a8ed7ccfa98afc 100644 (file)
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
*
*
* 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
* 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)
*/
- firstchar = ReadCommand(&input_message);
+ if (!in_fatal_exit)
+ firstchar = ReadCommand(&input_message);
+ else
+ firstchar = EOF;
/*
* (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
* backend-shutdown scenarios.
*/
- proc_exit(0);
+ proc_exit(!in_fatal_exit ? 0 : proc_exit_inprogress ||
+ !IsUnderPostmaster);
case 'd': /* copy data */
case 'c': /* copy done */
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 96366333f06c9d7f5e48b7e4228da98ea2fa9da9..e6f191d5df349d2af60f01296b62807e40002ac2 100644 (file)
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -37,7 +37,7 @@
*
*
* 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 */
unsigned int Log_destination;
+bool in_fatal_exit = false;
+
#ifdef HAVE_SYSLOG
char *Syslog_facility; /* openlog() parameters */
char *Syslog_ident;
@@ -442,7 +444,12 @@ errfinish(int dummy,...)
*/
fflush(stdout);
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;
}
/*
diff --git a/src/include/tcop/tcopprot.h b/src/include/tcop/tcopprot.h
index 046fe3e810e7b3dd914e0f6160805d98c92ff834..97556ccbf1de1fb1a4df065c643d0c3e810f5c8e 100644 (file)
--- a/src/include/tcop/tcopprot.h
+++ b/src/include/tcop/tcopprot.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* 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
* 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 char *rendezvous_name;
extern int max_stack_depth;
+extern bool in_fatal_exit;
/* GUC-configurable parameters */
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /