[libvirt] [PATCH 2/3] Make logging async signal safe wrt time stamp generation
Daniel Veillard
veillard at redhat.com
Wed Nov 30 08:02:56 UTC 2011
On Tue, Nov 29, 2011 at 04:21:46PM +0000, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at 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 at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list