As types are slowly converted to GObject, a helper function to unref all the GObjects in an array will come in handy, as it's already the case with virObject. Signed-off-by: Rafael Fonseca <r4f4rfs@xxxxxxxxx> --- src/libvirt_private.syms | 1 + src/util/virobject.c | 24 ++++++++++++++++++++++++ src/util/virobject.h | 4 ++++ 3 files changed, 29 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 2cde3c9aa5..4286efdd36 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2734,6 +2734,7 @@ virClassForObjectRWLockable; virClassIsDerivedFrom; virClassName; virClassNew; +virGObjectListFreeCount; virObjectFreeCallback; virObjectFreeHashData; virObjectIsClass; diff --git a/src/util/virobject.c b/src/util/virobject.c index c71781550f..9030fb1625 100644 --- a/src/util/virobject.c +++ b/src/util/virobject.c @@ -29,6 +29,7 @@ #include "virlog.h" #include "virprobe.h" #include "virstring.h" +#include <glib-object.h> #define VIR_FROM_THIS VIR_FROM_NONE @@ -636,3 +637,26 @@ virObjectListFreeCount(void *list, VIR_FREE(list); } + + +/** + * virGObjectListFreeCount: + * @list: A pointer to a list of GObject pointers to free + * @count: Number of elements in the list. + * + * Unrefs all members of @list and frees the list itself. + */ +void +virGObjectListFreeCount(void *list, + size_t count) +{ + size_t i; + + if (!list) + return; + + for (i = 0; i < count; i++) + g_clear_object(&((GObject **)list)[i]); + + VIR_FREE(list); +} diff --git a/src/util/virobject.h b/src/util/virobject.h index 62a8a3d132..1af048aefc 100644 --- a/src/util/virobject.h +++ b/src/util/virobject.h @@ -159,3 +159,7 @@ virObjectListFree(void *list); void virObjectListFreeCount(void *list, size_t count); + +void +virGObjectListFreeCount(void *list, + size_t count); -- 2.25.3