]> xenbits.xensource.com Git - libvirt.git/commitdiff
Make logging async signal safe wrt time stamp generation
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 29 Nov 2011 12:32:31 +0000 (12:32 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 30 Nov 2011 11:43:50 +0000 (11:43 +0000)
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

index 17c7e843855e939dc013380fc8c16920faa7ca40..f55050365fc36ff06be71734307a413e190c084a 100644 (file)
@@ -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;
 }