conf: Don't format cputune element when not needed

Commit 60b176c3d0 introduced a bug that
when editing an XML with cputune similar to this:

...
  <vcpu placement='static' current='1'>2</vcpu>
  <cputune>
    <vcpupin vcpu="1" cpuset="0"/>
  </cputune>
...

results in formatted XML that looks like this:

...
  <vcpu placement='static' current='1'>2</vcpu>
  <cputune>
  </cputune>
...

That is caused by a condition depending on def->cputune.vcpupin being
set rather than checking def->cputune.nvcpupin.  Notice that nvcpupin
can be 0 and vcpupin can still be allocated since it's a pointer to an
array, so no harm done there.

I also changed it on other places in the code where it depended on the
wrong variable.
This commit is contained in:
Martin Kletzander 2012-12-17 16:03:01 +01:00
parent 790d364ca2
commit 1f50730e44

View File

@ -13955,10 +13955,10 @@ virDomainIsAllVcpupinInherited(virDomainDefPtr def)
int i; int i;
if (!def->cpumask) { if (!def->cpumask) {
if (!def->cputune.vcpupin) if (def->cputune.nvcpupin)
return true;
else
return false; return false;
else
return true;
} else { } else {
for (i = 0; i < def->cputune.nvcpupin; i++) { for (i = 0; i < def->cputune.nvcpupin; i++) {
if (!virBitmapEqual(def->cputune.vcpupin[i]->cpumask, if (!virBitmapEqual(def->cputune.vcpupin[i]->cpumask,
@ -14143,7 +14143,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
virBufferAsprintf(buf, ">%u</vcpu>\n", def->maxvcpus); virBufferAsprintf(buf, ">%u</vcpu>\n", def->maxvcpus);
if (def->cputune.shares || if (def->cputune.shares ||
(def->cputune.vcpupin && !virDomainIsAllVcpupinInherited(def)) || (def->cputune.nvcpupin && !virDomainIsAllVcpupinInherited(def)) ||
def->cputune.period || def->cputune.quota || def->cputune.period || def->cputune.quota ||
def->cputune.emulatorpin || def->cputune.emulatorpin ||
def->cputune.emulator_period || def->cputune.emulator_quota) def->cputune.emulator_period || def->cputune.emulator_quota)
@ -14209,7 +14209,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
VIR_FREE(cpumask); VIR_FREE(cpumask);
} }
if (def->cputune.shares || if (def->cputune.shares ||
(def->cputune.vcpupin && !virDomainIsAllVcpupinInherited(def)) || (def->cputune.nvcpupin && !virDomainIsAllVcpupinInherited(def)) ||
def->cputune.period || def->cputune.quota || def->cputune.period || def->cputune.quota ||
def->cputune.emulatorpin || def->cputune.emulatorpin ||
def->cputune.emulator_period || def->cputune.emulator_quota) def->cputune.emulator_period || def->cputune.emulator_quota)