On 30.04.2015 14:44, Peter Krempa wrote: > Add virDomainObjListConvert that will take a list of virDomains, apply > filters and return a list of virDomainObjs. > --- > src/conf/domain_conf.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ > src/conf/domain_conf.h | 9 ++++++++ > src/libvirt_private.syms | 1 + > 3 files changed, 64 insertions(+) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 66fe470..73dc33f 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -23072,6 +23072,60 @@ virDomainObjListCollect(virDomainObjListPtr domlist, > > > int > +virDomainObjListConvert(virDomainObjListPtr domlist, > + virConnectPtr conn, > + virDomainPtr *doms, > + size_t ndoms, > + virDomainObjPtr **vms, > + size_t *nvms, > + virDomainObjListACLFilter filter, > + unsigned int flags, > + bool skip_missing) > +{ > + char uuidstr[VIR_UUID_STRING_BUFLEN]; > + virDomainObjPtr vm; > + size_t i; > + > + *nvms = 0; > + *vms = NULL; > + > + virObjectLock(domlist); > + for (i = 0; i < ndoms; i++) { > + virDomainPtr dom = doms[i]; > + > + virUUIDFormat(dom->uuid, uuidstr); > + > + if (!(vm = virHashLookup(domlist->objs, uuidstr))) { > + if (!skip_missing) { > + virReportError(VIR_ERR_NO_DOMAIN, > + _("no domain with matching uuid '%s' (%s)"), > + uuidstr, dom->name); > + virObjectUnlock(domlist); Move Unlock() before the virReportError(). Not that it would matter, but: a) it keeps list locked for shorter time b) I always felt like ReportError() and goto error should be joined together. > + goto error; > + } > + } else { > + virObjectRef(vm); > + > + if (VIR_APPEND_ELEMENT(*vms, *nvms, vm) < 0) Please unlock the @domlist before jumping anywhere. > + goto error; > + } > + } > + virObjectUnlock(domlist); > + > + virDomainObjListFilter(vms, nvms, conn, filter, flags); > + > + return 0; > + > + error: > + virObjectListFreeCount(*vms, *nvms); > + *vms = NULL; > + *nvms = 0; > + > + return -1; > +} > + > + Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list