aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/error/elog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/error/elog.c')
-rw-r--r--src/backend/utils/error/elog.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index fd6d35bb5ad..9d371a5a26d 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.110 2003/05/28 17:25:02 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.111 2003/05/28 18:19:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -410,18 +410,28 @@ errfinish(int dummy, ...)
/*
* For a FATAL error, we let proc_exit clean up and exit.
*
- * If we have not yet entered the main backend loop (ie, we are in
- * the postmaster or in backend startup), we also go directly to
- * proc_exit. The same is true if anyone tries to report an error
- * after proc_exit has begun to run. (It's proc_exit's
- * responsibility to see that this doesn't turn into infinite
- * recursion!) But in the latter case, we exit with nonzero exit
- * code to indicate that something's pretty wrong. We also want
- * to exit with nonzero exit code if not running under the
- * postmaster (for example, if we are being run from the initdb
- * script, we'd better return an error status).
+ * There are several other cases in which we treat ERROR as FATAL
+ * and go directly to proc_exit:
+ *
+ * 1. ExitOnAnyError mode switch is set (initdb uses this).
+ *
+ * 2. we have not yet entered the main backend loop (ie, we are in
+ * the postmaster or in backend startup); we have noplace to recover.
+ *
+ * 3. the error occurred after proc_exit has begun to run. (It's
+ * proc_exit's responsibility to see that this doesn't turn into
+ * infinite recursion!)
+ *
+ * In the last case, we exit with nonzero exit code to indicate that
+ * something's pretty wrong. We also want to exit with nonzero exit
+ * code if not running under the postmaster (for example, if we are
+ * being run from the initdb script, we'd better return an error
+ * status).
*/
- if (elevel == FATAL || !Warn_restart_ready || proc_exit_inprogress)
+ if (elevel == FATAL ||
+ ExitOnAnyError ||
+ !Warn_restart_ready ||
+ proc_exit_inprogress)
{
/*
* fflush here is just to improve the odds that we get to see