On 01/15/2016 09:05 AM, Nikolay Shirokovskiy wrote: > It's rather unexpected that function with such a name could return > transient definition. This is possible if we call it for > a transient active domain. But if it is called in such a conditions? > No. So we would better fix this case to return NULL. > > Calling conditions investigation. > > There are 4 distinct callers: > > 1. migration - explicitly set 'persistent' before calling. > 2. libxl_driver > First it assures that (VIR_DOMAIN_VCPU_CONFIG && !persistent) is false. > Then all usages of definition is under VIR_DOMAIN_VCPU_CONFIG flag, > so 'persistent' is set. > > 3. virDomainObjCopyPersistentDef - all callers of this function > has next structure: > 1 call virDomainLiveConfigHelperMethod or virDomainObjUpdateModificationImpact > thus we are sure that (VIR_DOMAIN_VCPU_CONFIG && !persistent) is false. > 2. call function of interest under VIR_DOMAIN_VCPU_CONFIG, so > 'persistent' flag is set. > > 4. virDomainLiveConfigHelperMethod - the same reason as in 3. > > Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@xxxxxxxxxxxxx> > --- > src/conf/domain_conf.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > You've based your assumptions off of the change you made in 1/3 to virDomainObjUpdateModificationImpact regarding combining that if statement. Also even if the following would fail, you would have need to provide some sort of virReportError. John > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index e54c097..018c77e 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -2825,18 +2825,21 @@ virDomainObjSetDefTransient(virCapsPtr caps, > > /* > * Return the persistent domain configuration. If domain is transient, > - * return the running config. > + * return NULL. > * > * @param caps pointer to capabilities info > * @param xmlopt pointer to XML parser configuration object > * @param domain domain object pointer > - * @return NULL on error, virDOmainDefPtr on success > + * @return NULL on error or transient domains, virDOmainDefPtr on success > */ > virDomainDefPtr > virDomainObjGetPersistentDef(virCapsPtr caps, > virDomainXMLOptionPtr xmlopt, > virDomainObjPtr domain) > { > + if (!domain->persistent) > + return NULL; > + > if (virDomainObjSetDefTransient(caps, xmlopt, domain, false) < 0) > return NULL; > > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list