@@ -189,6 +189,7 @@ xenDomainUsedCpus(virDomainPtr dom)
unsigned char *cpumap = NULL;
size_t cpumaplen;
int nb = 0;
+ int nbNodeCpus;
int n, m;
virVcpuInfoPtr cpuinfo = NULL;
virNodeInfo nodeinfo;
@@ -198,8 +199,11 @@ xenDomainUsedCpus(virDomainPtr dom)
return NULL;
priv = dom->conn->privateData;
+ xenUnifiedLock(priv);
+ nbNodeCpus = priv->nbNodeCpus;
+ xenUnifiedUnlock(priv);
- if (priv->nbNodeCpus <= 0)
+ if (nbNodeCpus <= 0)
return NULL;
nb_vcpu = xenUnifiedDomainGetMaxVcpus(dom);
if (nb_vcpu <= 0)
@@ -207,7 +211,7 @@ xenDomainUsedCpus(virDomainPtr dom)
if (xenUnifiedNodeGetInfo(dom->conn, &nodeinfo) < 0)
return NULL;
- if (!(cpulist = virBitmapNew(priv->nbNodeCpus))) {
+ if (!(cpulist = virBitmapNew(nbNodeCpus))) {
virReportOOMError();
goto done;
}
@@ -225,7 +229,7 @@ xenDomainUsedCpus(virDomainPtr dom)
if ((ncpus = xenUnifiedDomainGetVcpus(dom, cpuinfo, nb_vcpu,
cpumap, cpumaplen)) >= 0) {
for (n = 0; n < ncpus; n++) {
- for (m = 0; m < priv->nbNodeCpus; m++) {
+ for (m = 0; m < nbNodeCpus; m++) {
bool used;
ignore_value(virBitmapGetBit(cpulist, m, &used));
if ((!used) &&
@@ -233,7 +237,7 @@ xenDomainUsedCpus(virDomainPtr dom)
ignore_value(virBitmapSetBit(cpulist, m));
nb++;
/* if all CPU are used just return NULL */
- if (nb == priv->nbNodeCpus)
+ if (nb == nbNodeCpus)
goto done;
}
@@ -1403,9 +1407,7 @@ xenUnifiedDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
def = xenXMDomainGetXMLDesc(dom->conn, minidef);
} else {
char *cpus;
- xenUnifiedLock(priv);
cpus = xenDomainUsedCpus(dom);
- xenUnifiedUnlock(priv);
def = xenDaemonDomainGetXMLDesc(dom->conn, minidef, cpus);
VIR_FREE(cpus);
}