]> git.ipfire.org Git - thirdparty/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)
committerEric Blake <eblake@redhat.com>
Wed, 16 May 2012 22:57:36 +0000 (16:57 -0600)
Use the new virTimeStringNowRaw() API for generating log timestamps
in an async signal safe manner

* src/util/logging.c: Use virTimeStringNowRaw
(cherry picked from commit 32d3ec7466a554f7a4a3e9d4017a24aa540ecf18)

Conflicts:

src/util/logging.c

src/util/logging.c

index 9df90030abfba2417982497cf370a65ec871c2d9..22d7c2bbbd2462993c56582d02cbc4ec3e023f69 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;
-
-    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,
                    const char *funcname,
@@ -704,7 +685,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;
@@ -745,8 +726,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,
@@ -798,7 +779,6 @@ void virLogMessage(const char *category, int priority, const char *funcname,
 
 cleanup:
     VIR_FREE(msg);
-    VIR_FREE(timestamp);
     errno = saved_errno;
 }