conf: resctrl object is not properly handled

resctrl object stored in def->resctrls is shared by cachetune and
memorytune. The domain xml configuration is parsed firstly for
cachetune then memorytune, and the resctrl object will not be created
in parsing settings for memorytune once it found sharing exists.

But resctrl is improperly freed when sharing happens.

Signed-off-by: Wang Huaqiang <huaqiang.wang@intel.com>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Wang Huaqiang 2019-08-20 18:06:03 +08:00 committed by Michal Privoznik
parent 25b94e3b59
commit 51da92f418
2 changed files with 9 additions and 7 deletions

View File

@ -19590,7 +19590,6 @@ virDomainMemorytuneDefParse(virDomainDefPtr def,
VIR_AUTOUNREF(virResctrlAllocPtr) alloc = NULL;
ssize_t i = 0;
int n;
int ret = -1;
ctxt->node = node;
@ -19632,14 +19631,13 @@ virDomainMemorytuneDefParse(virDomainDefPtr def,
if (!(resctrl = virDomainResctrlNew(node, alloc, vcpus, flags)))
return -1;
if (VIR_APPEND_ELEMENT(def->resctrls, def->nresctrls, resctrl) < 0)
goto cleanup;
if (VIR_APPEND_ELEMENT(def->resctrls, def->nresctrls, resctrl) < 0) {
virDomainResctrlDefFree(resctrl);
return -1;
}
}
ret = 0;
cleanup:
virDomainResctrlDefFree(resctrl);
return ret;
return 0;
}

View File

@ -5,6 +5,10 @@
<currentMemory unit='KiB'>219136</currentMemory>
<vcpu placement='static'>4</vcpu>
<cputune>
<cachetune vcpus='0-1'>
<cache id='0' level='3' type='both' size='768' unit='KiB'/>
<cache id='1' level='3' type='both' size='768' unit='KiB'/>
</cachetune>
<memorytune vcpus='0-1'>
<node id='0' bandwidth='20'/>
<node id='1' bandwidth='30'/>