diff --git a/daemon/remote.c b/daemon/remote.c index 3a3f1683e9d7d606008a493256fd667fa075f3a9..e259a763b55d51ba95bcbfce5b0abb178abc7f14 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -6382,7 +6382,7 @@ remoteDispatchConnectGetAllDomainStats(virNetServerPtr server ATTRIBUTE_UNUSED, virNetMessageSaveError(rerr); virDomainStatsRecordListFree(retStats); - virDomainListFree(doms); + virObjectListFree(doms); return rv; } diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 4cd36a106604a1c8840f2df56c0e78dcf7b1a1af..0c3851321f271cf0d347aee891a02b49553b1dad 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -23071,28 +23071,6 @@ virDomainListPopulate(void *payload, #undef MATCH -/** - * virDomainListFree: - * @list: list of domains to free - * - * Frees a NULL-terminated list of domains without messing with currently - * set libvirt errors. - */ -void -virDomainListFree(virDomainPtr *list) -{ - virDomainPtr *next; - - if (!list) - return; - - for (next = list; *next; next++) - virObjectUnref(*next); - - VIR_FREE(list); -} - - int virDomainObjListExport(virDomainObjListPtr doms, virConnectPtr conn, @@ -23128,7 +23106,7 @@ virDomainObjListExport(virDomainObjListPtr doms, ret = data.ndomains; cleanup: - virDomainListFree(data.domains); + virObjectListFree(data.domains); virObjectUnlock(doms); return ret; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 087d282e28efed4ba8285d4bc3f7994314b11438..345f88289118ae3539e084838eed8b253f32653a 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3057,8 +3057,6 @@ int virDomainObjListExport(virDomainObjListPtr doms, virDomainObjListFilter filter, unsigned int flags); -void virDomainListFree(virDomainPtr *list); - int virDomainDefMaybeAddController(virDomainDefPtr def, int type, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index c8e6fb4d5539c959c42bd0ee7dbe3a61f7c58dc4..d7cac209026a183b7c13b8ce48468237d4c160f7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -341,7 +341,6 @@ virDomainLifecycleCrashTypeFromString; virDomainLifecycleCrashTypeToString; virDomainLifecycleTypeFromString; virDomainLifecycleTypeToString; -virDomainListFree; virDomainLiveConfigHelperMethod; virDomainLoaderDefFree; virDomainLoaderTypeFromString; @@ -1881,6 +1880,8 @@ virClassNew; virObjectFreeCallback; virObjectFreeHashData; virObjectIsClass; +virObjectListFree; +virObjectListFreeCount; virObjectLock; virObjectLockableNew; virObjectNew; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f40ccae179e94f8008d58169e1a454d155892af9..bd0ae3d79509177000ed0f6c28799eb63f614707 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -19901,7 +19901,7 @@ qemuConnectGetAllDomainStats(virConnectPtr conn, virDomainObjEndAPI(&dom); virDomainStatsRecordListFree(tmpstats); - virDomainListFree(domlist); + virObjectListFree(domlist); return ret; } diff --git a/src/util/virobject.c b/src/util/virobject.c index 9ccd3104988e5bd2418d8ad81b8dc9388ce479f0..51876b971a0751c8d4644e1f34c6b5c89aa09b3f 100644 --- a/src/util/virobject.c +++ b/src/util/virobject.c @@ -405,3 +405,44 @@ void virObjectFreeHashData(void *opaque, const void *name ATTRIBUTE_UNUSED) { virObjectUnref(opaque); } + + +/** + * virObjectListFree: + * @list: A pointer to a NULL-terminated list of object pointers to free + * + * Unrefs all members of @list and frees the list itself. + */ +void virObjectListFree(void *list) +{ + void **next; + + if (!list) + return; + + for (next = (void **) list; *next; next++) + virObjectUnref(*next); + + VIR_FREE(list); +} + + +/** + * virObjectListFreeCount: + * @list: A pointer to a list of object pointers to freea + * @count: Number of elements in the list. + * + * Unrefs all members of @list and frees the list itself. + */ +void virObjectListFreeCount(void *list, size_t count) +{ + size_t i; + + if (!list) + return; + + for (i = 0; i < count; i++) + virObjectUnref(((void **)list)[i]); + + VIR_FREE(list); +} diff --git a/src/util/virobject.h b/src/util/virobject.h index ad1f0c1d2c92a2c15c54c1f22509c53f84ddce79..c3ecc1ef672a5f5df1e035d638f3d37ee8af6cac 100644 --- a/src/util/virobject.h +++ b/src/util/virobject.h @@ -99,5 +99,7 @@ void virObjectLock(void *lockableobj) void virObjectUnlock(void *lockableobj) ATTRIBUTE_NONNULL(1); +void virObjectListFree(void *list); +void virObjectListFreeCount(void *list, size_t count); #endif /* __VIR_OBJECT_H */ diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c index 96865311a98c97f6c3f63ae0a11299e7766d0ca8..91c57e200a60a821af6120d3b62ee1ca7befaee3 100644 --- a/tools/virsh-domain-monitor.c +++ b/tools/virsh-domain-monitor.c @@ -2193,7 +2193,7 @@ cmdDomstats(vshControl *ctl, const vshCmd *cmd) ret = true; cleanup: virDomainStatsRecordListFree(records); - virDomainListFree(domlist); + virObjectListFree(domlist); return ret; }