[libvirt] [PATCH] Fix openlog() ident usage
Daniel Veillard
veillard at redhat.com
Tue Jan 20 19:36:27 UTC 2009
On Tue, Jan 20, 2009 at 11:14:03AM -0800, john.levon at sun.com wrote:
> # HG changeset patch
> # User john.levon at sun.com
> # Date 1232478815 28800
> # Node ID 37a6a671e38d7f4449d3b47bc5cf06c19362bc41
> # Parent 15bfba92a98744f8c554757ed608c3bf89fa38aa
> Fix openlog() ident usage
>
> 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
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 19:33:28 -0000
@@ -626,14 +626,20 @@
return(len);
}
+static char *current_ident = NULL;
+
static void virLogCloseSyslog(void *data ATTRIBUTE_UNUSED) {
+ VIR_FREE(current_ident);
closelog();
}
-static int virLogAddOutputToSyslog(int priority, const char *ident) {
+static int virLogAddOutputToSyslog(int priority, char *ident) {
+ VIR_FREE(current_ident);
openlog(ident, 0, 0);
+ current_ident = ident; /* ident need to be kept around on Solaris */
if (virLogDefineOutput(virLogOutputToSyslog, virLogCloseSyslog, NULL,
priority, 0) < 0) {
+ VIR_FREE(current_ident);
closelog();
return(-1);
}
@@ -703,9 +709,12 @@
name = strndup(str, cur - str);
if (name == NULL)
return(-1);
+ /*
+ * name is consumed by virLogAddOutputToSyslog which
+ * keep the reference
+ * */
if (virLogAddOutputToSyslog(prio, name) == 0)
ret++;
- VIR_FREE(name);
#endif /* HAVE_SYSLOG_H */
} else if (STREQLEN(cur, "file", 4)) {
cur += 4;
More information about the libvir-list
mailing list