mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
libxl: Use atomic ops for driver->nactive
This commit is contained in:
parent
d9f19c30d0
commit
6cd43d3654
@ -90,7 +90,7 @@ struct _libxlDriverPrivate {
|
|||||||
* then lockless thereafter */
|
* then lockless thereafter */
|
||||||
libxlDriverConfigPtr config;
|
libxlDriverConfigPtr config;
|
||||||
|
|
||||||
size_t nactive;
|
unsigned int nactive;
|
||||||
|
|
||||||
virStateInhibitCallback inhibitCallback;
|
virStateInhibitCallback inhibitCallback;
|
||||||
void *inhibitOpaque;
|
void *inhibitOpaque;
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
#include "virsysinfo.h"
|
#include "virsysinfo.h"
|
||||||
#include "viraccessapicheck.h"
|
#include "viraccessapicheck.h"
|
||||||
|
#include "viratomic.h"
|
||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_LIBXL
|
#define VIR_FROM_THIS VIR_FROM_LIBXL
|
||||||
|
|
||||||
@ -264,8 +265,7 @@ libxlVmCleanup(libxlDriverPrivatePtr driver,
|
|||||||
virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, reason);
|
virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
driver->nactive--;
|
if (virAtomicIntDecAndTest(&driver->nactive) && driver->inhibitCallback)
|
||||||
if (!driver->nactive && driver->inhibitCallback)
|
|
||||||
driver->inhibitCallback(false, driver->inhibitOpaque);
|
driver->inhibitCallback(false, driver->inhibitOpaque);
|
||||||
|
|
||||||
if ((vm->def->ngraphics == 1) &&
|
if ((vm->def->ngraphics == 1) &&
|
||||||
@ -654,9 +654,8 @@ libxlVmStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
|
|||||||
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0)
|
if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (!driver->nactive && driver->inhibitCallback)
|
if (virAtomicIntInc(&driver->nactive) == 1 && driver->inhibitCallback)
|
||||||
driver->inhibitCallback(true, driver->inhibitOpaque);
|
driver->inhibitCallback(true, driver->inhibitOpaque);
|
||||||
driver->nactive++;
|
|
||||||
|
|
||||||
event = virDomainEventNewFromObj(vm, VIR_DOMAIN_EVENT_STARTED,
|
event = virDomainEventNewFromObj(vm, VIR_DOMAIN_EVENT_STARTED,
|
||||||
restore_fd < 0 ?
|
restore_fd < 0 ?
|
||||||
@ -726,9 +725,8 @@ libxlReconnectDomain(virDomainObjPtr vm,
|
|||||||
vm->def->id = d_info.domid;
|
vm->def->id = d_info.domid;
|
||||||
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_UNKNOWN);
|
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->inhibitCallback(true, driver->inhibitOpaque);
|
||||||
driver->nactive++;
|
|
||||||
|
|
||||||
/* Recreate domain death et. al. events */
|
/* Recreate domain death et. al. events */
|
||||||
libxlCreateDomEvents(vm);
|
libxlCreateDomEvents(vm);
|
||||||
|
Loading…
Reference in New Issue
Block a user