diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 48afb8c5c973a7d57dbe5e116fd321cd35cbabdf..388bbe1660ad4543efa491ebfc20f73361d318ce 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -20020,6 +20020,29 @@ 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, @@ -20028,7 +20051,6 @@ virDomainObjListExport(virDomainObjListPtr doms, unsigned int flags) { int ret = -1; - size_t i; struct virDomainListData data = { conn, NULL, @@ -20056,13 +20078,7 @@ virDomainObjListExport(virDomainObjListPtr doms, ret = data.ndomains; cleanup: - if (data.domains) { - int count = virHashSize(doms->objs); - for (i = 0; i < count; i++) - virObjectUnref(data.domains[i]); - } - - VIR_FREE(data.domains); + virDomainListFree(data.domains); virObjectUnlock(doms); return ret; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index aead903095b8e165fee78a6c1e4a0c4b80b6a3aa..a05254a7b7d18f62d2100abc3833883a74d393d4 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2707,6 +2707,8 @@ 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 6b9ee21c74a7f8a7714665e22b2734e3a071424d..71fc0638c39d510f2725ee5f0854c30a2ee4ed57 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -311,6 +311,7 @@ virDomainLifecycleCrashTypeFromString; virDomainLifecycleCrashTypeToString; virDomainLifecycleTypeFromString; virDomainLifecycleTypeToString; +virDomainListFree; virDomainLiveConfigHelperMethod; virDomainLockFailureTypeFromString; virDomainLockFailureTypeToString;