diff --git a/lib/log/log.c b/lib/log/log.c index a69d8bbbd..0f3db5113 100644 --- a/lib/log/log.c +++ b/lib/log/log.c @@ -179,16 +179,20 @@ void print_log(int level, const char *file, int line, int dm_errno, const char *trformat; /* Translated format string */ char *newbuf; int use_stderr = level & _LOG_STDERR; - int internal_error = 0; + int fatal_internal_error = 0; level &= ~_LOG_STDERR; if (_abort_on_internal_errors && !strncmp(format, INTERNAL_ERROR, - strlen(INTERNAL_ERROR))) - internal_error = 1; - else if (_log_suppress == 2) + strlen(INTERNAL_ERROR))) { + fatal_internal_error = 1; /* Internal errors triggering abort cannot be suppressed. */ + _log_suppress = 0; + level = _LOG_FATAL; + } + + if (_log_suppress == 2) return; if (level <= _LOG_ERR) @@ -245,7 +249,7 @@ void print_log(int level, const char *file, int line, int dm_errno, if (!strcmp("", format) && verbose_level() <= _LOG_DEBUG) break; - if (internal_error || verbose_level() >= _LOG_DEBUG) { + if (verbose_level() >= _LOG_DEBUG) { fprintf(stderr, "%s%s%s", locn, log_command_name(), _msg_prefix); if (_indent) @@ -256,7 +260,7 @@ void print_log(int level, const char *file, int line, int dm_errno, break; case _LOG_INFO: - if (internal_error || verbose_level() >= _LOG_INFO) { + if (verbose_level() >= _LOG_INFO) { fprintf(stderr, "%s%s%s", locn, log_command_name(), _msg_prefix); if (_indent) @@ -266,7 +270,7 @@ void print_log(int level, const char *file, int line, int dm_errno, } break; case _LOG_NOTICE: - if (internal_error || verbose_level() >= _LOG_NOTICE) { + if (verbose_level() >= _LOG_NOTICE) { fprintf(stderr, "%s%s%s", locn, log_command_name(), _msg_prefix); if (_indent) @@ -276,7 +280,7 @@ void print_log(int level, const char *file, int line, int dm_errno, } break; case _LOG_WARN: - if (internal_error || verbose_level() >= _LOG_WARN) { + if (verbose_level() >= _LOG_WARN) { fprintf(use_stderr ? stderr : stdout, "%s%s", log_command_name(), _msg_prefix); vfprintf(use_stderr ? stderr : stdout, trformat, ap); @@ -284,7 +288,7 @@ void print_log(int level, const char *file, int line, int dm_errno, } break; case _LOG_ERR: - if (internal_error || verbose_level() >= _LOG_ERR) { + if (verbose_level() >= _LOG_ERR) { fprintf(stderr, "%s%s%s", locn, log_command_name(), _msg_prefix); vfprintf(stderr, trformat, ap); @@ -293,7 +297,7 @@ void print_log(int level, const char *file, int line, int dm_errno, break; case _LOG_FATAL: default: - if (internal_error || verbose_level() >= _LOG_FATAL) { + if (verbose_level() >= _LOG_FATAL) { fprintf(stderr, "%s%s%s", locn, log_command_name(), _msg_prefix); vfprintf(stderr, trformat, ap); @@ -304,7 +308,7 @@ void print_log(int level, const char *file, int line, int dm_errno, va_end(ap); } - if (internal_error) + if (fatal_internal_error) abort(); if (level > debug_level())