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
This commit is contained in:
Daniel P. Berrange
2011-11-30 11:43:50 +00:00
parent 3ec1289896
commit 32d3ec7466
+4 -24
View File
@@ -43,6 +43,7 @@
#include "buf.h" #include "buf.h"
#include "threads.h" #include "threads.h"
#include "virfile.h" #include "virfile.h"
#include "virtime.h"
#define VIR_FROM_THIS VIR_FROM_NONE #define VIR_FROM_THIS VIR_FROM_NONE
@@ -618,26 +619,6 @@ cleanup:
return ret; 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 static int
virLogFormatString(char **msg, virLogFormatString(char **msg,
@@ -705,7 +686,7 @@ void virLogMessage(const char *category, int priority, const char *funcname,
static bool logVersionStderr = true; static bool logVersionStderr = true;
char *str = NULL; char *str = NULL;
char *msg = NULL; char *msg = NULL;
char *timestamp = NULL; char timestamp[VIR_TIME_STRING_BUFLEN];
int fprio, i, ret; int fprio, i, ret;
int saved_errno = errno; int saved_errno = errno;
int emit = 1; int emit = 1;
@@ -746,8 +727,8 @@ void virLogMessage(const char *category, int priority, const char *funcname,
if (ret < 0) if (ret < 0)
goto cleanup; goto cleanup;
if (!(timestamp = virLogFormatTimestamp())) if (virTimeStringNowRaw(timestamp) < 0)
goto cleanup; timestamp[0] = '\0';
/* /*
* Log based on defaults, first store in the history buffer, * 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: cleanup:
VIR_FREE(msg); VIR_FREE(msg);
VIR_FREE(timestamp);
errno = saved_errno; errno = saved_errno;
} }