[dovecot-cvs] dovecot/src/lib failures.c,1.15,1.16 failures.h,1.4,1.5

cras at procontrol.fi cras at procontrol.fi
Sat Dec 28 10:06:37 EET 2002


Update of /home/cvs/dovecot/src/lib
In directory danu:/tmp/cvs-serv18946/lib

Modified Files:
	failures.c failures.h 
Log Message:
In case of internal errors in logging, exit() with FATAL_LOGERROR.



Index: failures.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/failures.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- failures.c	27 Dec 2002 16:02:25 -0000	1.15
+++ failures.c	28 Dec 2002 08:06:34 -0000	1.16
@@ -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)

Index: failures.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/failures.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- failures.h	20 Dec 2002 01:47:11 -0000	1.4
+++ failures.h	28 Dec 2002 08:06:34 -0000	1.5
@@ -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;




More information about the dovecot-cvs mailing list