]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
libxl: Use atomic ops for driver->nactive
authorJim Fehlig <jfehlig@suse.com>
Fri, 30 Aug 2013 20:54:50 +0000 (14:54 -0600)
committerJim Fehlig <jfehlig@suse.com>
Tue, 3 Sep 2013 22:43:21 +0000 (16:43 -0600)
src/libxl/libxl_conf.h
src/libxl/libxl_driver.c

index e3875bae693a1f9f16ffc690fcae5374bf0320e5..83bb6b975e24fa4c90207ec919d67d0d4789f3e1 100644 (file)
@@ -90,7 +90,7 @@ struct _libxlDriverPrivate {
      * then lockless thereafter */
     libxlDriverConfigPtr config;
 
-    size_t nactive;
+    unsigned int nactive;
 
     virStateInhibitCallback inhibitCallback;
     void *inhibitOpaque;
index f9fe2aa5f721d68107ce955b296750b67d07c3e6..12d5ddc7c2ea6391fb558f804a45c0a9ba9bb4f9 100644 (file)
@@ -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);