]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: virdomainobjlist: Introduce 'virDomainObjListCollectAll'
authorPeter Krempa <pkrempa@redhat.com>
Wed, 13 Jul 2022 13:18:56 +0000 (15:18 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 6 Jan 2023 14:27:52 +0000 (15:27 +0100)
Introduce a helper which will return a list of all domain objects inside
of the list without filtering and thus without the need to lock
individual members.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
src/conf/virdomainobjlist.c
src/conf/virdomainobjlist.h
src/libvirt_private.syms

index 2569454ff8a255b64a21b51ffa3e4684ed8c11b4..4968dfcf3e3d6cfd4f6f170fcb20ac38dda383a8 100644 (file)
@@ -913,6 +913,24 @@ virDomainObjListCollectIterator(void *payload,
 }
 
 
+void
+virDomainObjListCollectAll(virDomainObjList *domlist,
+                           virDomainObj ***vms,
+                           size_t *nvms)
+{
+    struct virDomainListData data = { NULL, 0 };
+
+    virObjectRWLockRead(domlist);
+    data.vms = g_new0(virDomainObj *, virHashSize(domlist->objs));
+
+    virHashForEach(domlist->objs, virDomainObjListCollectIterator, &data);
+    virObjectRWUnlock(domlist);
+
+    *nvms = data.nvms;
+    *vms = data.vms;
+}
+
+
 static void
 virDomainObjListFilter(virDomainObj ***list,
                        size_t *nvms,
@@ -954,18 +972,8 @@ virDomainObjListCollect(virDomainObjList *domlist,
                         virDomainObjListACLFilter filter,
                         unsigned int flags)
 {
-    struct virDomainListData data = { NULL, 0 };
-
-    virObjectRWLockRead(domlist);
-    data.vms = g_new0(virDomainObj *, virHashSize(domlist->objs));
-
-    virHashForEach(domlist->objs, virDomainObjListCollectIterator, &data);
-    virObjectRWUnlock(domlist);
-
-    virDomainObjListFilter(&data.vms, &data.nvms, conn, filter, flags);
-
-    *nvms = data.nvms;
-    *vms = data.vms;
+    virDomainObjListCollectAll(domlist, vms, nvms);
+    virDomainObjListFilter(vms, nvms, conn, filter, flags);
 
     return 0;
 }
index cfa165d56f0b952d545b5b2b1a05a4161251a3ec..8c536803747cf01b6665bb931294671cc6c56324 100644 (file)
@@ -145,6 +145,10 @@ virDomainObjListForEach(virDomainObjList *doms,
                  VIR_CONNECT_LIST_DOMAINS_FILTERS_SNAPSHOT    | \
                  VIR_CONNECT_LIST_DOMAINS_FILTERS_CHECKPOINT)
 
+void
+virDomainObjListCollectAll(virDomainObjList *domlist,
+                           virDomainObj ***vms,
+                           size_t *nvms);
 int
 virDomainObjListCollect(virDomainObjList *doms,
                         virConnectPtr conn,
index ae746a2d51a2164dcc57b9bfc9a706ee1e11d872..54a3859604c3741ce9445a13af447073fc77fd68 100644 (file)
@@ -1209,6 +1209,7 @@ virDomainMomentObjNew;
 # conf/virdomainobjlist.h
 virDomainObjListAdd;
 virDomainObjListCollect;
+virDomainObjListCollectAll;
 virDomainObjListConvert;
 virDomainObjListExport;
 virDomainObjListFindByID;