mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
vz: fix possible vzDomainDefineXMLFlags and prlsdkNewDomainByHandle race
Lock driver when a new domain is created in prlsdkNewDomainByHandle and try to find it in the list under lock again because it can race with vzDomainDefineXMLFlags when a domain with the same uuid is added via vz dispatcher directly and libvirt define. Signed-off-by: Maxim Nestratov <mnestratov@virtuozzo.com>
This commit is contained in:
parent
7762c5a233
commit
eb5e9c1ea9
@ -1254,9 +1254,18 @@ prlsdkNewDomainByHandle(vzDriverPtr driver, PRL_HANDLE sdkdom)
|
||||
unsigned char uuid[VIR_UUID_BUFLEN];
|
||||
char *name = NULL;
|
||||
|
||||
virObjectLock(driver);
|
||||
if (prlsdkGetDomainIds(sdkdom, &name, uuid) < 0)
|
||||
goto cleanup;
|
||||
|
||||
/* we should make sure that there is no such a VM exists */
|
||||
dom = virDomainObjListFindByUUID(driver->domains, uuid);
|
||||
if (dom) {
|
||||
virObjectUnlock(dom);
|
||||
dom = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!(dom = vzNewDomain(driver, name, uuid)))
|
||||
goto cleanup;
|
||||
|
||||
@ -1267,6 +1276,7 @@ prlsdkNewDomainByHandle(vzDriverPtr driver, PRL_HANDLE sdkdom)
|
||||
}
|
||||
|
||||
cleanup:
|
||||
virObjectUnlock(driver);
|
||||
VIR_FREE(name);
|
||||
return dom;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user