Signed-off-by: Tim Wiederhake <twiederh@xxxxxxxxxx> --- src/lxc/lxc_conf.c | 31 ++++++++++++++----------------- src/lxc/lxc_conf.h | 9 --------- src/lxc/lxc_controller.c | 25 ++++++++++--------------- src/lxc/lxc_fuse.c | 12 ++++++------ 4 files changed, 30 insertions(+), 47 deletions(-) diff --git a/src/lxc/lxc_conf.c b/src/lxc/lxc_conf.c index cf6679711a..3ab4d61fe3 100644 --- a/src/lxc/lxc_conf.c +++ b/src/lxc/lxc_conf.c @@ -159,24 +159,24 @@ virCaps *virLXCDriverGetCapabilities(virLXCDriver *driver, virCaps *ret = NULL; virCaps *caps = NULL; - lxcDriverLock(driver); - if (!refresh && !driver->caps) { - VIR_DEBUG("Capabilities didn't detect any guests. Forcing a refresh."); - refresh = true; + VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) { + if (!refresh && !driver->caps) { + VIR_DEBUG("Capabilities didn't detect any guests. Forcing a refresh."); + refresh = true; + } } - lxcDriverUnlock(driver); if (refresh && !(caps = virLXCDriverCapsInit(driver))) return NULL; - lxcDriverLock(driver); - if (refresh) { - virObjectUnref(driver->caps); - driver->caps = caps; - } + VIR_WITH_MUTEX_LOCK_GUARD(&driver->lock) { + if (refresh) { + virObjectUnref(driver->caps); + driver->caps = caps; + } - ret = virObjectRef(driver->caps); - lxcDriverUnlock(driver); + ret = virObjectRef(driver->caps); + } return ret; } @@ -248,11 +248,8 @@ virLXCLoadDriverConfig(virLXCDriverConfig *cfg, virLXCDriverConfig *virLXCDriverGetConfig(virLXCDriver *driver) { - virLXCDriverConfig *cfg; - lxcDriverLock(driver); - cfg = virObjectRef(driver->config); - lxcDriverUnlock(driver); - return cfg; + VIR_LOCK_GUARD lock = virLockGuardLock(&driver->lock); + return virObjectRef(driver->config); } static void diff --git a/src/lxc/lxc_conf.h b/src/lxc/lxc_conf.h index 5a1351bd63..04e51aa954 100644 --- a/src/lxc/lxc_conf.h +++ b/src/lxc/lxc_conf.h @@ -113,12 +113,3 @@ virCaps *virLXCDriverGetCapabilities(virLXCDriver *driver, bool refresh); virDomainXMLOption *lxcDomainXMLConfInit(virLXCDriver *driver, const char *defsecmodel); - -static inline void lxcDriverLock(virLXCDriver *driver) -{ - virMutexLock(&driver->lock); -} -static inline void lxcDriverUnlock(virLXCDriver *driver) -{ - virMutexUnlock(&driver->lock); -} diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c index c4e3b66751..b5289b2448 100644 --- a/src/lxc/lxc_controller.c +++ b/src/lxc/lxc_controller.c @@ -995,7 +995,7 @@ static int lxcControllerClearCapabilities(void) } static bool wantReboot; -static virMutex lock = VIR_MUTEX_INITIALIZER; +static virMutex mutex = VIR_MUTEX_INITIALIZER; static int virLXCControllerEventSendExit(virLXCController *ctrl, @@ -1012,13 +1012,13 @@ static void virLXCControllerSignalChildIO(virNetDaemon *dmn G_GNUC_UNUSED, ret = waitpid(-1, &status, WNOHANG); VIR_DEBUG("Got sig child %d vs %lld", ret, (long long)ctrl->initpid); if (ret == ctrl->initpid) { - virMutexLock(&lock); - if (WIFSIGNALED(status) && - WTERMSIG(status) == SIGHUP) { - VIR_DEBUG("Status indicates reboot"); - wantReboot = true; + VIR_WITH_MUTEX_LOCK_GUARD(&mutex) { + if (WIFSIGNALED(status) && + WTERMSIG(status) == SIGHUP) { + VIR_DEBUG("Status indicates reboot"); + wantReboot = true; + } } - virMutexUnlock(&lock); virLXCControllerEventSendExit(ctrl, wantReboot ? 1 : 0); } } @@ -1132,8 +1132,8 @@ static void virLXCControllerConsoleUpdateWatch(virLXCControllerConsole *console) static void virLXCControllerConsoleEPoll(int watch, int fd, int events, void *opaque) { virLXCControllerConsole *console = opaque; + VIR_LOCK_GUARD lock = virLockGuardLock(&mutex); - virMutexLock(&lock); VIR_DEBUG("IO event watch=%d fd=%d events=%d fromHost=%zu fromcont=%zu", watch, fd, events, console->fromHostLen, @@ -1149,7 +1149,7 @@ static void virLXCControllerConsoleEPoll(int watch, int fd, int events, void *op virReportSystemError(errno, "%s", _("Unable to wait on epoll")); virNetDaemonQuit(console->daemon); - goto cleanup; + return; } if (ret == 0) @@ -1171,16 +1171,13 @@ static void virLXCControllerConsoleEPoll(int watch, int fd, int events, void *op break; } } - - cleanup: - virMutexUnlock(&lock); } static void virLXCControllerConsoleIO(int watch, int fd, int events, void *opaque) { virLXCControllerConsole *console = opaque; + VIR_LOCK_GUARD lock = virLockGuardLock(&mutex); - virMutexLock(&lock); VIR_DEBUG("IO event watch=%d fd=%d events=%d fromHost=%zu fromcont=%zu", watch, fd, events, console->fromHostLen, @@ -1254,7 +1251,6 @@ static void virLXCControllerConsoleIO(int watch, int fd, int events, void *opaqu } virLXCControllerConsoleUpdateWatch(console); - virMutexUnlock(&lock); return; error: @@ -1262,7 +1258,6 @@ static void virLXCControllerConsoleIO(int watch, int fd, int events, void *opaqu virEventRemoveHandle(console->hostWatch); console->contWatch = console->hostWatch = -1; virNetDaemonQuit(console->daemon); - virMutexUnlock(&lock); } diff --git a/src/lxc/lxc_fuse.c b/src/lxc/lxc_fuse.c index c2fe8f0e60..2e600e4402 100644 --- a/src/lxc/lxc_fuse.c +++ b/src/lxc/lxc_fuse.c @@ -260,11 +260,11 @@ static struct fuse_operations lxcProcOper = { static void lxcFuseDestroy(struct virLXCFuse *fuse) { - virMutexLock(&fuse->lock); + VIR_LOCK_GUARD lock = virLockGuardLock(&fuse->lock); + fuse_unmount(fuse->mountpoint, fuse->ch); fuse_destroy(fuse->fuse); fuse->fuse = NULL; - virMutexUnlock(&fuse->lock); } static void lxcFuseRun(void *opaque) @@ -346,10 +346,10 @@ void lxcFreeFuse(struct virLXCFuse **f) if (fuse) { /* exit fuse_loop, lxcFuseRun thread may try to destroy * fuse->fuse at the same time,so add a lock here. */ - virMutexLock(&fuse->lock); - if (fuse->fuse) - fuse_exit(fuse->fuse); - virMutexUnlock(&fuse->lock); + VIR_WITH_MUTEX_LOCK_GUARD(&fuse->lock) { + if (fuse->fuse) + fuse_exit(fuse->fuse); + } g_free(fuse->mountpoint); g_free(*f); -- 2.31.1