提交 29bed27e 编写于 作者: M Michal Privoznik

lxc: Use atomic ops for driver->nactive

上级 7fca3755
...@@ -75,7 +75,7 @@ struct _virLXCDriver { ...@@ -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 @@ ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册