diff options
Diffstat (limited to 'src/backend/utils/error/elog.c')
-rw-r--r-- | src/backend/utils/error/elog.c | 198 |
1 files changed, 97 insertions, 101 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index d24242e8409..b4f1000be86 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -25,7 +25,7 @@ * scenario of this sort is "out of memory"; and it's also the nastiest * to handle because we'd likely also run out of memory while trying to * report this error! Our escape hatch for this case is to reset the - * ErrorContext to empty before trying to process the inner error. Since + * ErrorContext to empty before trying to process the inner error. Since * ErrorContext is guaranteed to have at least 8K of space in it (see mcxt.c), * we should be able to process an "out of memory" message successfully. * Since we lose the prior error state due to the reset, we won't be able @@ -42,7 +42,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.164 2005/10/14 20:53:56 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.165 2005/10/15 02:49:32 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -188,8 +188,8 @@ errstart(int elevel, const char *filename, int lineno, /* * Now decide whether we need to process this report at all; if it's - * warning or less and not enabled for logging, just return FALSE - * without starting up any error logging machinery. + * warning or less and not enabled for logging, just return FALSE without + * starting up any error logging machinery. */ /* Determine whether message is enabled for server log output */ @@ -256,8 +256,8 @@ errstart(int elevel, const char *filename, int lineno, MemoryContextReset(ErrorContext); /* - * If we recurse more than once, the problem might be something - * broken in a context traceback routine. Abandon them too. + * If we recurse more than once, the problem might be something broken + * in a context traceback routine. Abandon them too. */ if (recursion_depth > 2) error_context_stack = NULL; @@ -316,15 +316,15 @@ errfinish(int dummy,...) CHECK_STACK_DEPTH(); /* - * Do processing in ErrorContext, which we hope has enough reserved - * space to report an error. + * Do processing in ErrorContext, which we hope has enough reserved space + * to report an error. */ oldcontext = MemoryContextSwitchTo(ErrorContext); /* * Call any context callback functions. Errors occurring in callback - * functions will be treated as recursive errors --- this ensures we - * will avoid infinite recursion (see errstart). + * functions will be treated as recursive errors --- this ensures we will + * avoid infinite recursion (see errstart). */ for (econtext = error_context_stack; econtext != NULL; @@ -333,34 +333,32 @@ errfinish(int dummy,...) /* * If ERROR (not more nor less) we pass it off to the current handler. - * Printing it and popping the stack is the responsibility of - * the handler. + * Printing it and popping the stack is the responsibility of the handler. */ if (elevel == ERROR) { /* - * We do some minimal cleanup before longjmp'ing so that handlers - * can execute in a reasonably sane state. + * We do some minimal cleanup before longjmp'ing so that handlers can + * execute in a reasonably sane state. */ /* This is just in case the error came while waiting for input */ ImmediateInterruptOK = false; /* - * Reset InterruptHoldoffCount in case we ereport'd from - * inside an interrupt holdoff section. (We assume here that - * no handler will itself be inside a holdoff section. If - * necessary, such a handler could save and restore - * InterruptHoldoffCount for itself, but this should make life - * easier for most.) + * Reset InterruptHoldoffCount in case we ereport'd from inside an + * interrupt holdoff section. (We assume here that no handler will + * itself be inside a holdoff section. If necessary, such a handler + * could save and restore InterruptHoldoffCount for itself, but this + * should make life easier for most.) */ InterruptHoldoffCount = 0; - CritSectionCount = 0; /* should be unnecessary, but... */ + CritSectionCount = 0; /* should be unnecessary, but... */ /* - * Note that we leave CurrentMemoryContext set to ErrorContext. - * The handler should reset it to something else soon. + * Note that we leave CurrentMemoryContext set to ErrorContext. The + * handler should reset it to something else soon. */ recursion_depth--; @@ -370,12 +368,11 @@ errfinish(int dummy,...) /* * If we are doing FATAL or PANIC, abort any old-style COPY OUT in * progress, so that we can report the message before dying. (Without - * this, pq_putmessage will refuse to send the message at all, which - * is what we want for NOTICE messages, but not for fatal exits.) This - * hack is necessary because of poor design of old-style copy - * protocol. Note we must do this even if client is fool enough to - * have set client_min_messages above FATAL, so don't look at - * output_to_client. + * this, pq_putmessage will refuse to send the message at all, which is + * what we want for NOTICE messages, but not for fatal exits.) This hack + * is necessary because of poor design of old-style copy protocol. Note + * we must do this even if client is fool enough to have set + * client_min_messages above FATAL, so don't look at output_to_client. */ if (elevel >= FATAL && whereToSendOutput == Remote) pq_endcopyout(true); @@ -412,28 +409,27 @@ errfinish(int dummy,...) ImmediateInterruptOK = false; /* - * If we just reported a startup failure, the client will - * disconnect on receiving it, so don't send any more to the - * client. + * If we just reported a startup failure, the client will disconnect + * on receiving it, so don't send any more to the client. */ if (PG_exception_stack == NULL && whereToSendOutput == Remote) whereToSendOutput = None; /* * fflush here is just to improve the odds that we get to see the - * error message, in case things are so hosed that proc_exit - * crashes. Any other code you might be tempted to add here - * should probably be in an on_proc_exit callback instead. + * error message, in case things are so hosed that proc_exit crashes. + * Any other code you might be tempted to add here should probably be + * in an on_proc_exit callback instead. */ fflush(stdout); fflush(stderr); /* - * If proc_exit is already running, 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 proc_exit is already running, 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). */ proc_exit(proc_exit_inprogress || !IsUnderPostmaster); } @@ -441,8 +437,8 @@ errfinish(int dummy,...) if (elevel >= PANIC) { /* - * Serious crash time. Postmaster will observe nonzero process - * exit status and kill the other backends too. + * Serious crash time. Postmaster will observe nonzero process exit + * status and kill the other backends too. * * XXX: what if we are *in* the postmaster? abort() won't kill our * children... @@ -977,8 +973,8 @@ CopyErrorData(void) ErrorData *newedata; /* - * we don't increment recursion_depth because out-of-memory here does - * not indicate a problem within the error subsystem. + * we don't increment recursion_depth because out-of-memory here does not + * indicate a problem within the error subsystem. */ CHECK_STACK_DEPTH(); @@ -1037,9 +1033,9 @@ void FlushErrorState(void) { /* - * Reset stack to empty. The only case where it would be more than - * one deep is if we serviced an error that interrupted construction - * of another message. We assume control escaped out of that message + * Reset stack to empty. The only case where it would be more than one + * deep is if we serviced an error that interrupted construction of + * another message. We assume control escaped out of that message * construction and won't ever go back. */ errordata_stack_depth = -1; @@ -1117,7 +1113,7 @@ DebugFileOpen(void) 0666)) < 0) ereport(FATAL, (errcode_for_file_access(), - errmsg("could not open file \"%s\": %m", OutputFileName))); + errmsg("could not open file \"%s\": %m", OutputFileName))); istty = isatty(fd); close(fd); @@ -1131,17 +1127,17 @@ DebugFileOpen(void) OutputFileName))); /* - * If the file is a tty and we're running under the postmaster, - * try to send stdout there as well (if it isn't a tty then stderr - * will block out stdout, so we may as well let stdout go wherever - * it was going before). + * If the file is a tty and we're running under the postmaster, try to + * send stdout there as well (if it isn't a tty then stderr will block + * out stdout, so we may as well let stdout go wherever it was going + * before). */ if (istty && IsUnderPostmaster) if (!freopen(OutputFileName, "a", stdout)) ereport(FATAL, (errcode_for_file_access(), - errmsg("could not reopen file \"%s\" as stdout: %m", - OutputFileName))); + errmsg("could not reopen file \"%s\" as stdout: %m", + OutputFileName))); } } @@ -1156,13 +1152,13 @@ void set_syslog_parameters(const char *ident, int facility) { /* - * guc.c is likely to call us repeatedly with same parameters, so - * don't thrash the syslog connection unnecessarily. Also, we do not - * re-open the connection until needed, since this routine will get called - * whether or not Log_destination actually mentions syslog. + * guc.c is likely to call us repeatedly with same parameters, so don't + * thrash the syslog connection unnecessarily. Also, we do not re-open + * the connection until needed, since this routine will get called whether + * or not Log_destination actually mentions syslog. * - * Note that we make our own copy of the ident string rather than relying - * on guc.c's. This may be overly paranoid, but it ensures that we cannot + * Note that we make our own copy of the ident string rather than relying on + * guc.c's. This may be overly paranoid, but it ensures that we cannot * accidentally free a string that syslog is still using. */ if (syslog_ident == NULL || strcmp(syslog_ident, ident) != 0 || @@ -1212,13 +1208,12 @@ write_syslog(int level, const char *line) seq++; /* - * Our problem here is that many syslog implementations don't handle - * long messages in an acceptable manner. While this function doesn't - * help that fact, it does work around by splitting up messages into - * smaller pieces. + * Our problem here is that many syslog implementations don't handle long + * messages in an acceptable manner. While this function doesn't help that + * fact, it does work around by splitting up messages into smaller pieces. * - * We divide into multiple syslog() calls if message is too long - * or if the message contains embedded NewLine(s) '\n'. + * We divide into multiple syslog() calls if message is too long or if the + * message contains embedded NewLine(s) '\n'. */ len = strlen(line); if (len > PG_SYSLOG_LIMIT || strchr(line, '\n') != NULL) @@ -1290,7 +1285,7 @@ write_syslog(int level, const char *line) static void write_eventlog(int level, const char *line) { - int eventlevel = EVENTLOG_ERROR_TYPE; + int eventlevel = EVENTLOG_ERROR_TYPE; static HANDLE evtHandle = INVALID_HANDLE_VALUE; if (evtHandle == INVALID_HANDLE_VALUE) @@ -1356,9 +1351,9 @@ log_line_prefix(StringInfo buf) int i; /* - * This is one of the few places where we'd rather not inherit a - * static variable's value from the postmaster. But since we will, - * reset it when MyProcPid changes. + * This is one of the few places where we'd rather not inherit a static + * variable's value from the postmaster. But since we will, reset it when + * MyProcPid changes. */ if (log_my_pid != MyProcPid) { @@ -1412,8 +1407,8 @@ log_line_prefix(StringInfo buf) if (MyProcPort) { appendStringInfo(buf, "%lx.%x", - (long) (MyProcPort->session_start.tv_sec), - MyProcPid); + (long) (MyProcPort->session_start.tv_sec), + MyProcPid); } break; case 'p': @@ -1425,21 +1420,22 @@ log_line_prefix(StringInfo buf) case 'm': { /* - * Note: for %m, %t, and %s we deliberately use the - * C library's strftime/localtime, and not the - * equivalent functions from src/timezone. This - * ensures that all backends will report log entries - * in the same timezone, namely whatever C-library - * setting they inherit from the postmaster. If we - * used src/timezone then local settings of the - * TimeZone GUC variable would confuse the log. + * Note: for %m, %t, and %s we deliberately use the C + * library's strftime/localtime, and not the equivalent + * functions from src/timezone. This ensures that all + * backends will report log entries in the same timezone, + * namely whatever C-library setting they inherit from the + * postmaster. If we used src/timezone then local + * settings of the TimeZone GUC variable would confuse the + * log. */ - time_t stamp_time; - char strfbuf[128], msbuf[8]; + time_t stamp_time; + char strfbuf[128], + msbuf[8]; struct timeval tv; gettimeofday(&tv, NULL); - stamp_time = tv.tv_sec; + stamp_time = tv.tv_sec; strftime(strfbuf, sizeof(strfbuf), /* leave room for milliseconds... */ @@ -1452,8 +1448,8 @@ log_line_prefix(StringInfo buf) localtime(&stamp_time)); /* 'paste' milliseconds into place... */ - sprintf(msbuf, ".%03d", (int) (tv.tv_usec/1000)); - strncpy(strfbuf+19, msbuf, 4); + sprintf(msbuf, ".%03d", (int) (tv.tv_usec / 1000)); + strncpy(strfbuf + 19, msbuf, 4); appendStringInfoString(buf, strfbuf); } @@ -1535,7 +1531,7 @@ log_line_prefix(StringInfo buf) char * unpack_sql_state(int sql_state) { - static char buf[12]; + static char buf[12]; int i; for (i = 0; i < 5; i++) @@ -1629,8 +1625,7 @@ send_message_to_server_log(ErrorData *edata) } /* - * If the user wants the query that generated this error logged, do - * it. + * If the user wants the query that generated this error logged, do it. */ if (edata->elevel >= log_min_error_statement && debug_query_string != NULL) { @@ -1692,12 +1687,13 @@ send_message_to_server_log(ErrorData *edata) if ((Log_destination & LOG_DESTINATION_STDERR) || whereToSendOutput == Debug) { #ifdef WIN32 + /* * In a win32 service environment, there is no usable stderr. Capture * anything going there and write it to the eventlog instead. * - * If stderr redirection is active, it's ok to write to stderr - * because that's really a pipe to the syslogger process. + * If stderr redirection is active, it's ok to write to stderr because + * that's really a pipe to the syslogger process. */ if ((!Redirect_stderr || am_syslogger) && pgwin32_is_service()) write_eventlog(edata->elevel, buf.data); @@ -1847,12 +1843,12 @@ send_message_to_frontend(ErrorData *edata) pq_endmessage(&msgbuf); /* - * This flush is normally not necessary, since postgres.c will flush - * out waiting data when control returns to the main loop. But it - * seems best to leave it here, so that the client has some clue what - * happened if the backend dies before getting back to the main loop - * ... error/notice messages should not be a performance-critical path - * anyway, so an extra flush won't hurt much ... + * This flush is normally not necessary, since postgres.c will flush out + * waiting data when control returns to the main loop. But it seems best + * to leave it here, so that the client has some clue what happened if the + * backend dies before getting back to the main loop ... error/notice + * messages should not be a performance-critical path anyway, so an extra + * flush won't hurt much ... */ pq_flush(); } @@ -1887,9 +1883,9 @@ expand_fmt_string(const char *fmt, ErrorData *edata) if (*cp == 'm') { /* - * Replace %m by system error string. If there are any - * %'s in the string, we'd better double them so that - * vsnprintf won't misinterpret. + * Replace %m by system error string. If there are any %'s in + * the string, we'd better double them so that vsnprintf won't + * misinterpret. */ const char *cp2; @@ -1934,8 +1930,8 @@ useful_strerror(int errnum) str = strerror(errnum); /* - * Some strerror()s return an empty string for out-of-range errno. - * This is ANSI C spec compliant, but not exactly useful. + * Some strerror()s return an empty string for out-of-range errno. This is + * ANSI C spec compliant, but not exactly useful. */ if (str == NULL || *str == '\0') { |