From bc1047945272235208fddcda71d8f25e3063e589 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Wed, 23 Dec 2009 00:24:36 +0100 Subject: log: fix log_message so do only one write before the fsync. This way the logging from the various child processes does not get clobbered up. Formerly, the different write portions (time stamp, message, newline) would get mixed from the various child processes' log messages. Michael --- src/log.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/log.c b/src/log.c index 46cc210..0c55ca8 100644 --- a/src/log.c +++ b/src/log.c @@ -173,6 +173,8 @@ void log_message (int level, const char *fmt, ...) syslog (level, "%s", str); #endif } else { + char *p; + nowtime = time (NULL); /* Format is month day hour:minute:second (24 time) */ strftime (time_string, TIME_LENGTH, "%b %d %H:%M:%S", @@ -182,22 +184,20 @@ void log_message (int level, const char *fmt, ...) syslog_level[level], time_string, (long int) getpid ()); - assert (log_file_fd >= 0); + /* + * Overwrite the '\0' and leave room for a trailing '\n' + * be added next. + */ + p = str + strlen(str); + vsnprintf (p, STRING_LENGTH - strlen(str) - 1, fmt, args); - ret = write (log_file_fd, str, strlen (str)); - if (ret == -1) { - log_message (LOG_WARNING, - "Could not write to log file"); - } + p = str + strlen(str); + *p = '\n'; + *(p+1) = '\0'; - vsnprintf (str, STRING_LENGTH, fmt, args); - ret = write (log_file_fd, str, strlen (str)); - if (ret == -1) { - log_message (LOG_WARNING, - "Could not write to log file"); - } + assert (log_file_fd >= 0); - ret = write (log_file_fd, "\n", 1); + ret = write (log_file_fd, str, strlen (str)); if (ret == -1) { log_message (LOG_WARNING, "Could not write to log file"); -- cgit v1.2.3