[libvirt] [PATCHv3 1/5] conf: Add helper to free domain list

Peter Krempa pkrempa at redhat.com
Wed Aug 27 18:25:39 UTC 2014


Add helper to free a list of virDomainPtrs without raising or clearing
errors. Use it in one place and prepare it for reuse.
---
 src/conf/domain_conf.c   | 31 +++++++++++++++++++++++--------
 src/conf/domain_conf.h   |  2 ++
 src/libvirt_private.syms |  1 +
 3 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3b295ab..e9ed3fc 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -20016,6 +20016,28 @@ virDomainListPopulate(void *payload,
 }
 #undef MATCH

+
+/**
+ * virDomainListFree:
+ * @list: list of domains to free
+ *
+ * Frees the 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,
@@ -20024,7 +20046,6 @@ virDomainObjListExport(virDomainObjListPtr doms,
                        unsigned int flags)
 {
     int ret = -1;
-    size_t i;

     struct virDomainListData data = {
         conn, NULL,
@@ -20052,13 +20073,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 aead903..a05254a 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 6b9ee21..71fc063 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -311,6 +311,7 @@ virDomainLifecycleCrashTypeFromString;
 virDomainLifecycleCrashTypeToString;
 virDomainLifecycleTypeFromString;
 virDomainLifecycleTypeToString;
+virDomainListFree;
 virDomainLiveConfigHelperMethod;
 virDomainLockFailureTypeFromString;
 virDomainLockFailureTypeToString;
-- 
2.0.2




More information about the libvir-list mailing list