From 057788c53745e316c60b51d4157da8e3ca2c1acd Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Mon, 4 Jul 2016 12:19:38 +0200 Subject: [PATCH] virlog: Introduce virLogOutputFree Provide a separate method to free a logging output object. This will come handy once a method to create an individual logging output object is introduced. Signed-off-by: Erik Skultety --- src/libvirt_private.syms | 1 + src/util/virlog.c | 24 ++++++++++++++++-------- src/util/virlog.h | 4 ++++ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index aa5ae1a615..553e004421 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1822,6 +1822,7 @@ virLogGetNbOutputs; virLogGetOutputs; virLogLock; virLogMessage; +virLogOutputFree; virLogParseDefaultPriority; virLogParseFilters; virLogParseOutputs; diff --git a/src/util/virlog.c b/src/util/virlog.c index 20d0140286..5c5c5cdbbe 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -106,8 +106,6 @@ struct _virLogOutput { virLogDestination dest; char *name; }; -typedef struct _virLogOutput virLogOutput; -typedef virLogOutput *virLogOutputPtr; static virLogOutputPtr *virLogOutputs; static size_t virLogNbOutputs; @@ -329,17 +327,27 @@ virLogResetOutputs(void) { size_t i; - for (i = 0; i < virLogNbOutputs; i++) { - if (virLogOutputs[i]->c != NULL) - virLogOutputs[i]->c(virLogOutputs[i]->data); - VIR_FREE(virLogOutputs[i]->name); - VIR_FREE(virLogOutputs[i]); - } + for (i = 0; i < virLogNbOutputs; i++) + virLogOutputFree(virLogOutputs[i]); + VIR_FREE(virLogOutputs); virLogNbOutputs = 0; } +void +virLogOutputFree(virLogOutputPtr output) +{ + if (!output) + return; + + if (output->c) + output->c(output->data); + VIR_FREE(output->name); + VIR_FREE(output); + +} + /** * virLogDefineOutput: * @f: the function to call to output a message diff --git a/src/util/virlog.h b/src/util/virlog.h index 3ad00d49c3..bdd9ae3aac 100644 --- a/src/util/virlog.h +++ b/src/util/virlog.h @@ -130,6 +130,9 @@ struct _virLogMetadata { typedef struct _virLogMetadata virLogMetadata; typedef struct _virLogMetadata *virLogMetadataPtr; +typedef struct _virLogOutput virLogOutput; +typedef virLogOutput *virLogOutputPtr; + /** * virLogOutputFunc: * @src: the source of the log message @@ -187,6 +190,7 @@ int virLogDefineOutput(virLogOutputFunc f, virLogDestination dest, const char *name, unsigned int flags); +void virLogOutputFree(virLogOutputPtr output); /* * Internal logging API