Mercurial > dovecot > original-hg > dovecot-1.2
changeset 866:43a42c16bba8 HEAD
In case of internal errors in logging, exit() with FATAL_LOGERROR.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 28 Dec 2002 10:06:34 +0200 |
parents | 8676ba4f3ba9 |
children | e1656057b9a5 |
files | src/lib/failures.c src/lib/failures.h |
diffstat | 2 files changed, 27 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/failures.c Sat Dec 28 10:01:45 2002 +0200 +++ b/src/lib/failures.c Sat Dec 28 10:06:34 2002 +0200 @@ -79,8 +79,8 @@ } } -static void default_handler(const char *prefix, FILE *f, - const char *format, va_list args) +static int default_handler(const char *prefix, FILE *f, + const char *format, va_list args) { static int recursed = 0; va_list args2; @@ -89,7 +89,7 @@ if (recursed == 2) { /* we're being called from some signal handler, or printf_string_upper_bound() killed us again */ - return; + return -1; } recursed++; @@ -128,17 +128,21 @@ errno = old_errno; recursed--; + + return 0; } static void default_panic_handler(const char *format, va_list args) { - default_handler("Panic: ", log_fd, format, args); + (void)default_handler("Panic: ", log_fd, format, args); abort(); } static void default_fatal_handler(int status, const char *format, va_list args) { - default_handler("Fatal: ", log_fd, format, args); + if (default_handler("Fatal: ", log_fd, format, args) < 0 && + status == FATAL_DEFAULT) + status = FATAL_LOGERROR; if (fflush(log_fd) < 0 && status == FATAL_DEFAULT) status = FATAL_LOGWRITE; @@ -150,7 +154,8 @@ { int old_errno = errno; - default_handler("Error: ", log_fd, format, args); + if (default_handler("Error: ", log_fd, format, args) < 0) + exit(FATAL_LOGERROR); if (fflush(log_fd) < 0) exit(FATAL_LOGWRITE); @@ -162,7 +167,7 @@ { int old_errno = errno; - default_handler("Warning: ", log_fd, format, args); + (void)default_handler("Warning: ", log_fd, format, args); if (fflush(log_fd) < 0) exit(FATAL_LOGWRITE); @@ -174,7 +179,7 @@ { int old_errno = errno; - default_handler("Info: ", log_info_fd, format, args); + (void)default_handler("Info: ", log_info_fd, format, args); if (fflush(log_info_fd) < 0) exit(FATAL_LOGWRITE); @@ -271,14 +276,14 @@ info_handler = func; } -static void syslog_handler(int level, const char *format, va_list args) +static int syslog_handler(int level, const char *format, va_list args) { va_list args2; static int recursed = 0; if (recursed != 0) - return; + return -1; recursed++; @@ -288,33 +293,37 @@ vsyslog(level, format, args2); recursed--; + + return 0; } void i_syslog_panic_handler(const char *fmt, va_list args) { - syslog_handler(LOG_CRIT, fmt, args); + (void)syslog_handler(LOG_CRIT, fmt, args); abort(); } void i_syslog_fatal_handler(int status, const char *fmt, va_list args) { - syslog_handler(LOG_CRIT, fmt, args); + if (syslog_handler(LOG_CRIT, fmt, args) < 0 && status == FATAL_DEFAULT) + status = FATAL_LOGERROR; exit(status); } void i_syslog_error_handler(const char *fmt, va_list args) { - syslog_handler(LOG_ERR, fmt, args); + if (syslog_handler(LOG_ERR, fmt, args) < 0) + exit(FATAL_LOGERROR); } void i_syslog_warning_handler(const char *fmt, va_list args) { - syslog_handler(LOG_WARNING, fmt, args); + (void)syslog_handler(LOG_WARNING, fmt, args); } void i_syslog_info_handler(const char *fmt, va_list args) { - syslog_handler(LOG_INFO, fmt, args); + (void)syslog_handler(LOG_INFO, fmt, args); } void i_set_failure_syslog(const char *ident, int options, int facility)
--- a/src/lib/failures.h Sat Dec 28 10:01:45 2002 +0200 +++ b/src/lib/failures.h Sat Dec 28 10:06:34 2002 +0200 @@ -5,8 +5,9 @@ typedef enum { FATAL_LOGOPEN = 80, /* Can't open log file */ FATAL_LOGWRITE = 81, /* Can't write to log file */ - FATAL_OUTOFMEM = 82, /* Out of memory */ - FATAL_EXEC = 83, /* exec() failed */ + FATAL_LOGERROR = 82, /* Internal logging error */ + FATAL_OUTOFMEM = 83, /* Out of memory */ + FATAL_EXEC = 84, /* exec() failed */ FATAL_DEFAULT = 89 } FatalExitStatus;