From 6cd43d36544162e197186e7d5bc39809ff6875fb Mon Sep 17 00:00:00 2001 From: Jim Fehlig Date: Fri, 30 Aug 2013 14:54:50 -0600 Subject: [PATCH] libxl: Use atomic ops for driver->nactive --- src/libxl/libxl_conf.h | 2 +- src/libxl/libxl_driver.c | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h index e3875bae69..83bb6b975e 100644 --- a/src/libxl/libxl_conf.h +++ b/src/libxl/libxl_conf.h @@ -90,7 +90,7 @@ struct _libxlDriverPrivate { * then lockless thereafter */ libxlDriverConfigPtr config; - size_t nactive; + unsigned int nactive; virStateInhibitCallback inhibitCallback; void *inhibitOpaque; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index f9fe2aa5f7..12d5ddc7c2 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -50,6 +50,7 @@ #include "virstring.h" #include "virsysinfo.h" #include "viraccessapicheck.h" +#include "viratomic.h" #define VIR_FROM_THIS VIR_FROM_LIBXL @@ -264,8 +265,7 @@ libxlVmCleanup(libxlDriverPrivatePtr driver, virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, reason); } - driver->nactive--; - if (!driver->nactive && driver->inhibitCallback) + if (virAtomicIntDecAndTest(&driver->nactive) && driver->inhibitCallback) driver->inhibitCallback(false, driver->inhibitOpaque); if ((vm->def->ngraphics == 1) && @@ -654,9 +654,8 @@ libxlVmStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm, if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0) goto error; - if (!driver->nactive && driver->inhibitCallback) + if (virAtomicIntInc(&driver->nactive) == 1 && driver->inhibitCallback) driver->inhibitCallback(true, driver->inhibitOpaque); - driver->nactive++; event = virDomainEventNewFromObj(vm, VIR_DOMAIN_EVENT_STARTED, restore_fd < 0 ? @@ -726,9 +725,8 @@ libxlReconnectDomain(virDomainObjPtr vm, vm->def->id = d_info.domid; virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_UNKNOWN); - if (!driver->nactive && driver->inhibitCallback) + if (virAtomicIntInc(&driver->nactive) == 1 && driver->inhibitCallback) driver->inhibitCallback(true, driver->inhibitOpaque); - driver->nactive++; /* Recreate domain death et. al. events */ libxlCreateDomEvents(vm);