1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

openvz: Use automatic mutex management

Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Tim Wiederhake 2022-02-11 13:54:11 +01:00
parent 3b5b1f9209
commit 2bfd03cc5d

View File

@ -65,16 +65,6 @@ static int openvzDomainSetMemoryInternal(virDomainObj *vm,
unsigned long long memory); unsigned long long memory);
static int openvzGetVEStatus(virDomainObj *vm, int *status, int *reason); static int openvzGetVEStatus(virDomainObj *vm, int *status, int *reason);
static void openvzDriverLock(struct openvz_driver *driver)
{
virMutexLock(&driver->lock);
}
static void openvzDriverUnlock(struct openvz_driver *driver)
{
virMutexUnlock(&driver->lock);
}
struct openvz_driver ovz_driver; struct openvz_driver ovz_driver;
@ -101,12 +91,9 @@ static virDomainObj *
openvzDomObjFromDomain(struct openvz_driver *driver, openvzDomObjFromDomain(struct openvz_driver *driver,
const unsigned char *uuid) const unsigned char *uuid)
{ {
virDomainObj *vm; VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
openvzDriverLock(driver); return openvzDomObjFromDomainLocked(driver, uuid);
vm = openvzDomObjFromDomainLocked(driver, uuid);
openvzDriverUnlock(driver);
return vm;
} }
@ -262,12 +249,12 @@ static virDomainPtr openvzDomainLookupByID(virConnectPtr conn,
int id) int id)
{ {
struct openvz_driver *driver = conn->privateData; struct openvz_driver *driver = conn->privateData;
virDomainObj *vm; virDomainObj *vm = NULL;
virDomainPtr dom = NULL; virDomainPtr dom = NULL;
openvzDriverLock(driver); VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) {
vm = virDomainObjListFindByID(driver->domains, id); vm = virDomainObjListFindByID(driver->domains, id);
openvzDriverUnlock(driver); }
if (!vm) { if (!vm) {
virReportError(VIR_ERR_NO_DOMAIN, virReportError(VIR_ERR_NO_DOMAIN,
@ -285,9 +272,9 @@ static virDomainPtr openvzDomainLookupByID(virConnectPtr conn,
static int openvzConnectGetVersion(virConnectPtr conn, unsigned long *version) static int openvzConnectGetVersion(virConnectPtr conn, unsigned long *version)
{ {
struct openvz_driver *driver = conn->privateData; struct openvz_driver *driver = conn->privateData;
openvzDriverLock(driver); VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
*version = driver->version; *version = driver->version;
openvzDriverUnlock(driver);
return 0; return 0;
} }
@ -334,12 +321,12 @@ static virDomainPtr openvzDomainLookupByName(virConnectPtr conn,
const char *name) const char *name)
{ {
struct openvz_driver *driver = conn->privateData; struct openvz_driver *driver = conn->privateData;
virDomainObj *vm; virDomainObj *vm = NULL;
virDomainPtr dom = NULL; virDomainPtr dom = NULL;
openvzDriverLock(driver); VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) {
vm = virDomainObjListFindByName(driver->domains, name); vm = virDomainObjListFindByName(driver->domains, name);
openvzDriverUnlock(driver); }
if (!vm) { if (!vm) {
virReportError(VIR_ERR_NO_DOMAIN, virReportError(VIR_ERR_NO_DOMAIN,
@ -808,13 +795,13 @@ openvzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
virDomainObj *vm = NULL; virDomainObj *vm = NULL;
virDomainPtr dom = NULL; virDomainPtr dom = NULL;
unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE; unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
virCheckFlags(VIR_DOMAIN_DEFINE_VALIDATE, NULL); virCheckFlags(VIR_DOMAIN_DEFINE_VALIDATE, NULL);
if (flags & VIR_DOMAIN_DEFINE_VALIDATE) if (flags & VIR_DOMAIN_DEFINE_VALIDATE)
parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA; parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA;
openvzDriverLock(driver);
if ((vmdef = virDomainDefParseString(xml, driver->xmlopt, if ((vmdef = virDomainDefParseString(xml, driver->xmlopt,
NULL, parse_flags)) == NULL) NULL, parse_flags)) == NULL)
goto cleanup; goto cleanup;
@ -876,7 +863,6 @@ openvzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
cleanup: cleanup:
virDomainObjEndAPI(&vm); virDomainObjEndAPI(&vm);
openvzDriverUnlock(driver);
return dom; return dom;
} }
@ -896,13 +882,13 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
virDomainObj *vm = NULL; virDomainObj *vm = NULL;
virDomainPtr dom = NULL; virDomainPtr dom = NULL;
unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE; unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
virCheckFlags(VIR_DOMAIN_START_VALIDATE, NULL); virCheckFlags(VIR_DOMAIN_START_VALIDATE, NULL);
if (flags & VIR_DOMAIN_START_VALIDATE) if (flags & VIR_DOMAIN_START_VALIDATE)
parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA; parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA;
openvzDriverLock(driver);
if ((vmdef = virDomainDefParseString(xml, driver->xmlopt, if ((vmdef = virDomainDefParseString(xml, driver->xmlopt,
NULL, parse_flags)) == NULL) NULL, parse_flags)) == NULL)
goto cleanup; goto cleanup;
@ -963,7 +949,6 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
cleanup: cleanup:
virDomainObjEndAPI(&vm); virDomainObjEndAPI(&vm);
openvzDriverUnlock(driver);
return dom; return dom;
} }
@ -972,15 +957,15 @@ openvzDomainCreateWithFlags(virDomainPtr dom, unsigned int flags)
{ {
g_autoptr(virCommand) cmd = virCommandNewArgList(VZCTL, "--quiet", "start", NULL); g_autoptr(virCommand) cmd = virCommandNewArgList(VZCTL, "--quiet", "start", NULL);
struct openvz_driver *driver = dom->conn->privateData; struct openvz_driver *driver = dom->conn->privateData;
virDomainObj *vm; virDomainObj *vm = NULL;
int ret = -1; int ret = -1;
int status; int status;
virCheckFlags(0, -1); virCheckFlags(0, -1);
openvzDriverLock(driver); VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) {
vm = virDomainObjListFindByName(driver->domains, dom->name); vm = virDomainObjListFindByName(driver->domains, dom->name);
openvzDriverUnlock(driver); }
if (!vm) { if (!vm) {
virReportError(VIR_ERR_NO_DOMAIN, virReportError(VIR_ERR_NO_DOMAIN,
@ -1028,10 +1013,10 @@ openvzDomainUndefineFlags(virDomainPtr dom,
virDomainObj *vm; virDomainObj *vm;
int ret = -1; int ret = -1;
int status; int status;
VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
virCheckFlags(0, -1); virCheckFlags(0, -1);
openvzDriverLock(driver);
if (!(vm = openvzDomObjFromDomainLocked(driver, dom->uuid))) if (!(vm = openvzDomObjFromDomainLocked(driver, dom->uuid)))
goto cleanup; goto cleanup;
@ -1052,7 +1037,6 @@ openvzDomainUndefineFlags(virDomainPtr dom,
cleanup: cleanup:
virDomainObjEndAPI(&vm); virDomainObjEndAPI(&vm);
openvzDriverUnlock(driver);
return ret; return ret;
} }
@ -1321,13 +1305,9 @@ openvzConnectIsAlive(virConnectPtr conn G_GNUC_UNUSED)
static char *openvzConnectGetCapabilities(virConnectPtr conn) { static char *openvzConnectGetCapabilities(virConnectPtr conn) {
struct openvz_driver *driver = conn->privateData; struct openvz_driver *driver = conn->privateData;
char *ret; VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
openvzDriverLock(driver); return virCapabilitiesFormatXML(driver->caps);
ret = virCapabilitiesFormatXML(driver->caps);
openvzDriverUnlock(driver);
return ret;
} }
static int openvzConnectListDomains(virConnectPtr conn G_GNUC_UNUSED, static int openvzConnectListDomains(virConnectPtr conn G_GNUC_UNUSED,
@ -1370,13 +1350,9 @@ static int openvzConnectListDomains(virConnectPtr conn G_GNUC_UNUSED,
static int openvzConnectNumOfDomains(virConnectPtr conn) static int openvzConnectNumOfDomains(virConnectPtr conn)
{ {
struct openvz_driver *driver = conn->privateData; struct openvz_driver *driver = conn->privateData;
int n; VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
openvzDriverLock(driver); return virDomainObjListNumOfDomains(driver->domains, true, NULL, NULL);
n = virDomainObjListNumOfDomains(driver->domains, true, NULL, NULL);
openvzDriverUnlock(driver);
return n;
} }
static int openvzConnectListDefinedDomains(virConnectPtr conn G_GNUC_UNUSED, static int openvzConnectListDefinedDomains(virConnectPtr conn G_GNUC_UNUSED,
@ -1480,13 +1456,9 @@ Version: 2.2
static int openvzConnectNumOfDefinedDomains(virConnectPtr conn) static int openvzConnectNumOfDefinedDomains(virConnectPtr conn)
{ {
struct openvz_driver *driver = conn->privateData; struct openvz_driver *driver = conn->privateData;
int n; VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
openvzDriverLock(driver); return virDomainObjListNumOfDomains(driver->domains, false, NULL, NULL);
n = virDomainObjListNumOfDomains(driver->domains, false, NULL, NULL);
openvzDriverUnlock(driver);
return n;
} }
static int static int
@ -1818,11 +1790,11 @@ openvzDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
virDomainObj *vm = NULL; virDomainObj *vm = NULL;
virDomainDef *def = NULL; virDomainDef *def = NULL;
bool persist = false; bool persist = false;
VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
virCheckFlags(VIR_DOMAIN_DEVICE_MODIFY_LIVE | virCheckFlags(VIR_DOMAIN_DEVICE_MODIFY_LIVE |
VIR_DOMAIN_DEVICE_MODIFY_CONFIG, -1); VIR_DOMAIN_DEVICE_MODIFY_CONFIG, -1);
openvzDriverLock(driver);
if (!(vm = openvzDomObjFromDomainLocked(driver, dom->uuid))) if (!(vm = openvzDomObjFromDomainLocked(driver, dom->uuid)))
goto cleanup; goto cleanup;
@ -1849,7 +1821,6 @@ openvzDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
ret = 0; ret = 0;
cleanup: cleanup:
openvzDriverUnlock(driver);
virDomainDeviceDefFree(dev); virDomainDeviceDefFree(dev);
virDomainObjEndAPI(&vm); virDomainObjEndAPI(&vm);
return ret; return ret;
@ -1861,16 +1832,10 @@ openvzConnectListAllDomains(virConnectPtr conn,
unsigned int flags) unsigned int flags)
{ {
struct openvz_driver *driver = conn->privateData; struct openvz_driver *driver = conn->privateData;
int ret = -1; VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock);
virCheckFlags(VIR_CONNECT_LIST_DOMAINS_FILTERS_ALL, -1); virCheckFlags(VIR_CONNECT_LIST_DOMAINS_FILTERS_ALL, -1);
return virDomainObjListExport(driver->domains, conn, domains, NULL, flags);
openvzDriverLock(driver);
ret = virDomainObjListExport(driver->domains, conn, domains,
NULL, flags);
openvzDriverUnlock(driver);
return ret;
} }