mirror of
https://github.com/libvirt/libvirt.git
synced 2026-09-03 20:53:04 -05:00
lxc: Use atomic ops for driver->nactive
This commit is contained in:
+1
-1
@@ -75,7 +75,7 @@ struct _virLXCDriver {
|
|||||||
|
|
||||||
virSysinfoDefPtr hostsysinfo;
|
virSysinfoDefPtr hostsysinfo;
|
||||||
|
|
||||||
size_t nactive;
|
unsigned int nactive;
|
||||||
|
|
||||||
virStateInhibitCallback inhibitCallback;
|
virStateInhibitCallback inhibitCallback;
|
||||||
void *inhibitOpaque;
|
void *inhibitOpaque;
|
||||||
|
|||||||
@@ -48,6 +48,7 @@
|
|||||||
#include "lxc_hostdev.h"
|
#include "lxc_hostdev.h"
|
||||||
#include "virhook.h"
|
#include "virhook.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
|
#include "viratomic.h"
|
||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_LXC
|
#define VIR_FROM_THIS VIR_FROM_LXC
|
||||||
|
|
||||||
@@ -257,8 +258,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver,
|
|||||||
vm->pid = -1;
|
vm->pid = -1;
|
||||||
vm->def->id = -1;
|
vm->def->id = -1;
|
||||||
|
|
||||||
driver->nactive--;
|
if (virAtomicIntDecAndTest(&driver->nactive) && driver->inhibitCallback)
|
||||||
if (!driver->nactive && driver->inhibitCallback)
|
|
||||||
driver->inhibitCallback(false, driver->inhibitOpaque);
|
driver->inhibitCallback(false, driver->inhibitOpaque);
|
||||||
|
|
||||||
virLXCDomainReAttachHostDevices(driver, vm->def);
|
virLXCDomainReAttachHostDevices(driver, vm->def);
|
||||||
@@ -1284,9 +1284,8 @@ int virLXCProcessStart(virConnectPtr conn,
|
|||||||
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, reason);
|
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, reason);
|
||||||
priv->doneStopEvent = false;
|
priv->doneStopEvent = false;
|
||||||
|
|
||||||
if (!driver->nactive && driver->inhibitCallback)
|
if (virAtomicIntInc(&driver->nactive) == 1 && driver->inhibitCallback)
|
||||||
driver->inhibitCallback(true, driver->inhibitOpaque);
|
driver->inhibitCallback(true, driver->inhibitOpaque);
|
||||||
driver->nactive++;
|
|
||||||
|
|
||||||
if (lxcContainerWaitForContinue(handshakefds[0]) < 0) {
|
if (lxcContainerWaitForContinue(handshakefds[0]) < 0) {
|
||||||
char out[1024];
|
char out[1024];
|
||||||
@@ -1470,9 +1469,8 @@ virLXCProcessReconnectDomain(virDomainObjPtr vm,
|
|||||||
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
|
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
|
||||||
VIR_DOMAIN_RUNNING_UNKNOWN);
|
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++;
|
|
||||||
|
|
||||||
if (!(priv->monitor = virLXCProcessConnectMonitor(driver, vm)))
|
if (!(priv->monitor = virLXCProcessConnectMonitor(driver, vm)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|||||||
Reference in New Issue
Block a user