]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
util: Make the virDomainListFree helper more universal
authorPeter Krempa <pkrempa@redhat.com>
Wed, 29 Apr 2015 09:54:58 +0000 (11:54 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 11 May 2015 06:28:53 +0000 (08:28 +0200)
Extend it to a universal helper used for clearing lists of any objects.
Note that the argument type is specifically void * to allow implicit
typecasting.

Additionally add a helper that works on non-NULL terminated arrays once
we know the length.

daemon/remote.c
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms
src/qemu/qemu_driver.c
src/util/virobject.c
src/util/virobject.h
tools/virsh-domain-monitor.c

index 3a3f1683e9d7d606008a493256fd667fa075f3a9..e259a763b55d51ba95bcbfce5b0abb178abc7f14 100644 (file)
@@ -6382,7 +6382,7 @@ remoteDispatchConnectGetAllDomainStats(virNetServerPtr server ATTRIBUTE_UNUSED,
         virNetMessageSaveError(rerr);
 
     virDomainStatsRecordListFree(retStats);
-    virDomainListFree(doms);
+    virObjectListFree(doms);
 
     return rv;
 }
index 4cd36a106604a1c8840f2df56c0e78dcf7b1a1af..0c3851321f271cf0d347aee891a02b49553b1dad 100644 (file)
@@ -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;
 }
index 087d282e28efed4ba8285d4bc3f7994314b11438..345f88289118ae3539e084838eed8b253f32653a 100644 (file)
@@ -3057,8 +3057,6 @@ int virDomainObjListExport(virDomainObjListPtr doms,
                            virDomainObjListFilter filter,
                            unsigned int flags);
 
-void virDomainListFree(virDomainPtr *list);
-
 int
 virDomainDefMaybeAddController(virDomainDefPtr def,
                                int type,
index c8e6fb4d5539c959c42bd0ee7dbe3a61f7c58dc4..d7cac209026a183b7c13b8ce48468237d4c160f7 100644 (file)
@@ -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;
index f40ccae179e94f8008d58169e1a454d155892af9..bd0ae3d79509177000ed0f6c28799eb63f614707 100644 (file)
@@ -19901,7 +19901,7 @@ qemuConnectGetAllDomainStats(virConnectPtr conn,
     virDomainObjEndAPI(&dom);
 
     virDomainStatsRecordListFree(tmpstats);
-    virDomainListFree(domlist);
+    virObjectListFree(domlist);
 
     return ret;
 }
index 9ccd3104988e5bd2418d8ad81b8dc9388ce479f0..51876b971a0751c8d4644e1f34c6b5c89aa09b3f 100644 (file)
@@ -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);
+}
index ad1f0c1d2c92a2c15c54c1f22509c53f84ddce79..c3ecc1ef672a5f5df1e035d638f3d37ee8af6cac 100644 (file)
@@ -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 */
index 96865311a98c97f6c3f63ae0a11299e7766d0ca8..91c57e200a60a821af6120d3b62ee1ca7befaee3 100644 (file)
@@ -2193,7 +2193,7 @@ cmdDomstats(vshControl *ctl, const vshCmd *cmd)
     ret = true;
  cleanup:
     virDomainStatsRecordListFree(records);
-    virDomainListFree(domlist);
+    virObjectListFree(domlist);
 
     return ret;
 }