virNetDaemonAddServer(virNetDaemon *dmn,
virNetServer *srv)
{
- int ret = -1;
const char *serverName = virNetServerGetName(srv);
-
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
if (virHashAddEntry(dmn->servers, serverName, srv) < 0)
- goto cleanup;
+ return -1;
virObjectRef(srv);
-
- ret = 0;
- cleanup:
- virObjectUnlock(dmn);
- return ret;
+ return 0;
}
virNetDaemonGetServer(virNetDaemon *dmn,
const char *serverName)
{
- virNetServer *srv = NULL;
-
- virObjectLock(dmn);
- srv = virObjectRef(virHashLookup(dmn->servers, serverName));
- virObjectUnlock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
+ virNetServer *srv = virObjectRef(virHashLookup(dmn->servers, serverName));
if (!srv) {
virReportError(VIR_ERR_NO_SERVER,
virNetDaemonHasServer(virNetDaemon *dmn,
const char *serverName)
{
- void *ent;
-
- virObjectLock(dmn);
- ent = virHashLookup(dmn->servers, serverName);
- virObjectUnlock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
- return ent != NULL;
+ return virHashLookup(dmn->servers, serverName) != NULL;
}
virNetDaemonGetServers(virNetDaemon *dmn,
virNetServer ***servers)
{
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
struct collectData data = { servers, 0 };
- ssize_t ret = -1;
*servers = NULL;
- virObjectLock(dmn);
-
if (virHashForEach(dmn->servers, collectServers, &data) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Cannot get all servers from daemon"));
- goto cleanup;
+ virObjectListFreeCount(*servers, data.nservers);
+ return -1;
}
- ret = data.nservers;
-
- cleanup:
- if (ret < 0)
- virObjectListFreeCount(*servers, data.nservers);
- virObjectUnlock(dmn);
- return ret;
+ return data.nservers;
}
g_autoptr(virJSONValue) object = virJSONValueNewObject();
g_autoptr(virJSONValue) srvObj = virJSONValueNewObject();
g_autofree virHashKeyValuePair *srvArray = NULL;
-
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
if (!(srvArray = virHashGetItems(dmn->servers, NULL, true)))
- goto error;
+ return NULL;
for (i = 0; srvArray[i].key; i++) {
virNetServer *server = virHashLookup(dmn->servers, srvArray[i].key);
g_autoptr(virJSONValue) srvJSON = NULL;
if (!server)
- goto error;
+ return NULL;
srvJSON = virNetServerPreExecRestart(server);
if (!srvJSON)
- goto error;
+ return NULL;
if (virJSONValueObjectAppend(srvObj, srvArray[i].key, &srvJSON) < 0)
- goto error;
+ return NULL;
}
- virObjectUnlock(dmn);
-
if (virJSONValueObjectAppend(object, "servers", &srvObj) < 0)
return NULL;
return g_steal_pointer(&object);
-
- error:
- virObjectUnlock(dmn);
- return NULL;
}
bool
virNetDaemonIsPrivileged(virNetDaemon *dmn)
{
- bool priv;
- virObjectLock(dmn);
- priv = dmn->privileged;
- virObjectUnlock(dmn);
- return priv;
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
+
+ return dmn->privileged;
}
virNetDaemonAutoShutdown(virNetDaemon *dmn,
unsigned int timeout)
{
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
dmn->autoShutdownTimeout = timeout;
-
- virObjectUnlock(dmn);
}
void
virNetDaemonAddShutdownInhibition(virNetDaemon *dmn)
{
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
+
dmn->autoShutdownInhibitions++;
VIR_DEBUG("dmn=%p inhibitions=%zu", dmn, dmn->autoShutdownInhibitions);
_("Virtual machines need to be saved"),
"delay");
#endif
-
- virObjectUnlock(dmn);
}
void
virNetDaemonRemoveShutdownInhibition(virNetDaemon *dmn)
{
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
+
dmn->autoShutdownInhibitions--;
VIR_DEBUG("dmn=%p inhibitions=%zu", dmn, dmn->autoShutdownInhibitions);
VIR_DEBUG("Closing inhibit FD %d", dmn->autoShutdownInhibitFd);
VIR_FORCE_CLOSE(dmn->autoShutdownInhibitFd);
}
-
- virObjectUnlock(dmn);
}
virNetDaemonSignalFunc func,
void *opaque)
{
- virNetDaemonSignal *sigdata = NULL;
+ g_autofree virNetDaemonSignal *sigdata = NULL;
struct sigaction sig_action;
-
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
if (virNetDaemonSignalSetup(dmn) < 0)
- goto error;
+ return -1;
VIR_EXPAND_N(dmn->signals, dmn->nsignals, 1);
sigaction(signum, &sig_action, &sigdata->oldaction);
- dmn->signals[dmn->nsignals-1] = sigdata;
-
- virObjectUnlock(dmn);
+ dmn->signals[dmn->nsignals-1] = g_steal_pointer(&sigdata);
return 0;
-
- error:
- VIR_FREE(sigdata);
- virObjectUnlock(dmn);
- return -1;
}
#else /* WIN32 */
void *opaque)
{
virNetDaemon *dmn = opaque;
-
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
if (!dmn->autoShutdownInhibitions) {
VIR_DEBUG("Automatic shutdown triggered");
dmn->quit = true;
}
-
- virObjectUnlock(dmn);
}
static int
virNetDaemonUpdateServices(virNetDaemon *dmn,
bool enabled)
{
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
+
virHashForEach(dmn->servers, daemonServerUpdateServices, &enabled);
- virObjectUnlock(dmn);
}
static int
bool graceful = false;
virHashForEach(dmn->servers, daemonServerShutdownWait, NULL);
- if (dmn->shutdownWaitCb && dmn->shutdownWaitCb() < 0)
- goto finish;
+ if (!dmn->shutdownWaitCb || dmn->shutdownWaitCb() >= 0) {
+ if (dmn->stateStopThread)
+ virThreadJoin(dmn->stateStopThread);
- if (dmn->stateStopThread)
- virThreadJoin(dmn->stateStopThread);
-
- graceful = true;
+ graceful = true;
+ }
- finish:
- virObjectLock(dmn);
- dmn->graceful = graceful;
- virEventUpdateTimeout(dmn->finishTimer, 0);
- virObjectUnlock(dmn);
+ VIR_WITH_OBJECT_LOCK_GUARD(dmn) {
+ dmn->graceful = graceful;
+ virEventUpdateTimeout(dmn->finishTimer, 0);
+ }
}
static void
void *opaque)
{
virNetDaemon *dmn = opaque;
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
- virObjectLock(dmn);
dmn->finished = true;
- virObjectUnlock(dmn);
}
void
virNetDaemonSetStateStopWorkerThread(virNetDaemon *dmn,
virThread **thr)
{
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
VIR_DEBUG("Setting state stop worker thread on dmn=%p to thr=%p", dmn, thr);
dmn->stateStopThread = g_steal_pointer(thr);
- virObjectUnlock(dmn);
}
void
virNetDaemonQuit(virNetDaemon *dmn)
{
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
VIR_DEBUG("Quit requested %p", dmn);
dmn->quit = true;
-
- virObjectUnlock(dmn);
}
void
virNetDaemonQuitExecRestart(virNetDaemon *dmn)
{
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
VIR_DEBUG("Exec-restart requested %p", dmn);
dmn->quit = true;
dmn->execRestart = true;
-
- virObjectUnlock(dmn);
}
virNetDaemonShutdownCallback prepareCb,
virNetDaemonShutdownCallback waitCb)
{
- virObjectLock(dmn);
+ VIR_LOCK_GUARD lock = virObjectLockGuard(dmn);
dmn->shutdownPrepareCb = prepareCb;
dmn->shutdownWaitCb = waitCb;
-
- virObjectUnlock(dmn);
}