On Tue, Nov 29, 2011 at 04:21:46PM +0000, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange(a)redhat.com>
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 files changed, 4 insertions(+), 24 deletions(-)
diff --git a/src/util/logging.c b/src/util/logging.c
index 17c7e84..f550503 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];
Okay, I had to go back to the definition to make sure it includes the
terminating 0, maybe fix the comment in [1/3] of VIR_TIME_STRING_BUFLEN
to use NUL and not NULL as the later would be the size of a pointer ;-)
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;
}
ACK
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/