From 32d3ec7466a554f7a4a3e9d4017a24aa540ecf18 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 29 Nov 2011 12:32:31 +0000 Subject: [PATCH] Make logging async signal safe wrt time stamp generation Use the new virTimeStringNowRaw() API for generating log timestamps in an async signal safe manner * src/util/logging.c: Use virTimeStringNowRaw --- src/util/logging.c | 28 ++++------------------------ 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/src/util/logging.c b/src/util/logging.c index 17c7e84385..f55050365f 100644 --- a/src/util/logging.c +++ b/src/util/logging.c @@ -43,6 +43,7 @@ #include "buf.h" #include "threads.h" #include "virfile.h" +#include "virtime.h" #define VIR_FROM_THIS VIR_FROM_NONE @@ -618,26 +619,6 @@ cleanup: return ret; } -static char * -virLogFormatTimestamp(void) -{ - struct timeval cur_time; - struct tm time_info; - char *str = NULL; - - gettimeofday(&cur_time, NULL); - localtime_r(&cur_time.tv_sec, &time_info); - time_info.tm_year += 1900; - time_info.tm_mon += 1; - - if (virAsprintf(&str, "%4d-%02d-%02d %02d:%02d:%02d.%03d", - time_info.tm_year, time_info.tm_mon, time_info.tm_mday, - time_info.tm_hour, time_info.tm_min, time_info.tm_sec, - (int) (cur_time.tv_usec / 1000)) < 0) - return NULL; - - return str; -} static int virLogFormatString(char **msg, @@ -705,7 +686,7 @@ void virLogMessage(const char *category, int priority, const char *funcname, static bool logVersionStderr = true; char *str = NULL; char *msg = NULL; - char *timestamp = NULL; + char timestamp[VIR_TIME_STRING_BUFLEN]; int fprio, i, ret; int saved_errno = errno; int emit = 1; @@ -746,8 +727,8 @@ void virLogMessage(const char *category, int priority, const char *funcname, if (ret < 0) goto cleanup; - if (!(timestamp = virLogFormatTimestamp())) - goto cleanup; + if (virTimeStringNowRaw(timestamp) < 0) + timestamp[0] = '\0'; /* * Log based on defaults, first store in the history buffer, @@ -799,7 +780,6 @@ void virLogMessage(const char *category, int priority, const char *funcname, cleanup: VIR_FREE(msg); - VIR_FREE(timestamp); errno = saved_errno; }