[libvirt] [PATCH] Fix openlog() ident usage
Daniel Veillard
veillard at redhat.com
Tue Jan 20 21:18:31 UTC 2009
On Tue, Jan 20, 2009 at 08:36:27PM +0100, Daniel Veillard wrote:
> On Tue, Jan 20, 2009 at 11:14:03AM -0800, john.levon at sun.com wrote:
> > It cannot be freed, as it's used by reference in the syslog code, at
> > least on Solaris.
>
> The requirement is apparently not present on Linux, sorry :-)
>
> I would prefer to keep the reference around and not leak it for
> example on reloads
Another version with an extra strdup but making clearer what
the change do and fixing the closelog/free order,
if tested positively please apply, thanks !
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/
-------------- next part --------------
Index: src/logging.c
===================================================================
RCS file: /data/cvs/libxen/src/logging.c,v
retrieving revision 1.6
diff -u -r1.6 logging.c
--- src/logging.c 15 Jan 2009 19:56:05 -0000 1.6
+++ src/logging.c 20 Jan 2009 21:15:20 -0000
@@ -626,15 +626,27 @@
return(len);
}
+static char *current_ident = NULL;
+
static void virLogCloseSyslog(void *data ATTRIBUTE_UNUSED) {
closelog();
+ VIR_FREE(current_ident);
}
static int virLogAddOutputToSyslog(int priority, const char *ident) {
- openlog(ident, 0, 0);
+ /*
+ * ident need to be kept around on Solaris
+ */
+ VIR_FREE(current_ident);
+ current_ident = strdup(ident);
+ if (current_ident == NULL)
+ return(-1);
+
+ openlog(current_ident, 0, 0);
if (virLogDefineOutput(virLogOutputToSyslog, virLogCloseSyslog, NULL,
priority, 0) < 0) {
closelog();
+ VIR_FREE(current_ident);
return(-1);
}
return(0);
More information about the libvir-list
mailing list