if (virDomainSaveConfig(BHYVE_CONFIG_DIR, caps,
vm->newDef ? vm->newDef : vm->def) < 0) {
virDomainObjListRemove(privconn->domains, vm);
- vm = NULL;
goto cleanup;
}
virObjectUnref(caps);
virDomainDefFree(def);
virDomainDefFree(oldDef);
- if (vm)
- virObjectUnlock(vm);
+ virDomainObjEndAPI(&vm);
if (event)
virObjectEventStateQueue(privconn->domainEventState, event);
VIR_DOMAIN_EVENT_UNDEFINED,
VIR_DOMAIN_EVENT_UNDEFINED_REMOVED);
- if (virDomainObjIsActive(vm)) {
+ if (virDomainObjIsActive(vm))
vm->persistent = 0;
- } else {
+ else
virDomainObjListRemove(privconn->domains, vm);
- virObjectLock(vm);
- }
ret = 0;
VIR_DOMAIN_RUNNING_BOOTED,
start_flags) < 0) {
/* If domain is not persistent, remove its data */
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(privconn->domains, vm);
- vm = NULL;
- }
goto cleanup;
}
cleanup:
virObjectUnref(caps);
virDomainDefFree(def);
- if (vm)
- virObjectUnlock(vm);
+ virDomainObjEndAPI(&vm);
if (event)
virObjectEventStateQueue(privconn->domainEventState, event);
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_DESTROYED);
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(privconn->domains, vm);
- virObjectLock(vm);
- }
cleanup:
virDomainObjEndAPI(&vm);
* Upon entry @vm should have at least 1 ref and be locked.
*
* Add the @vm into the @doms->objs and @doms->objsName hash
- * tables.
+ * tables. Once successfully added into a table, increase the
+ * reference count since upon removal in virHashRemoveEntry
+ * the virObjectUnref will be called since the hash tables were
+ * configured to call virObjectFreeHashData when the object is
+ * removed from the hash table.
*
- * Returns 0 on success with 2 references and locked
+ * Returns 0 on success with 3 references and locked
* -1 on failure with 1 reference and locked
*/
static int
virUUIDFormat(vm->def->uuid, uuidstr);
if (virHashAddEntry(doms->objs, uuidstr, vm) < 0)
return -1;
+ virObjectRef(vm);
if (virHashAddEntry(doms->objsName, vm->def->name, vm) < 0) {
- virObjectRef(vm);
virHashRemoveEntry(doms->objs, uuidstr);
return -1;
}
-
- /* Since domain is in two hash tables, increment the
- * reference counter */
virObjectRef(vm);
return 0;
* the @def being added is assumed to represent a
* live config, not a future inactive config
*
+ * The returned @vm from this function will be locked and ref
+ * counted. The caller is expected to use virDomainObjEndAPI
+ * when it completes usage.
*/
static virDomainObjPtr
virDomainObjListAddLocked(virDomainObjListPtr doms,
def,
!!(flags & VIR_DOMAIN_OBJ_LIST_ADD_LIVE),
oldDef);
- /* XXX: Temporary until this API is fixed to return a locked and
- * refcnt'd object */
- virObjectUnref(vm);
} else {
/* UUID does not match, but if a name matches, refuse it */
if ((vm = virDomainObjListFindByNameLocked(doms, def->name))) {
virHashRemoveEntry(doms->objs, uuidstr);
virHashRemoveEntry(doms->objsName, dom->def->name);
- virObjectUnlock(dom);
}
* no one else is either waiting for 'dom' or still using it.
*
* When this function returns, @dom will be removed from the hash
- * tables, unlocked, and returned with the refcnt that was present
- * upon entry.
+ * tables and returned with lock and refcnt that was present upon entry.
*/
void
virDomainObjListRemove(virDomainObjListPtr doms,
if (virHashAddEntry(doms->objsName, new_name, dom) < 0)
goto cleanup;
- /* Okay, this is crazy. virHashAddEntry() does not increment
- * the refcounter of @dom, but virHashRemoveEntry() does
- * decrement it. We need to work around it. */
+ /* Increment the refcnt for @new_name. We're about to remove
+ * the @old_name which will cause the refcnt to be decremented
+ * via the virObjectUnref call made during the virObjectFreeHashData
+ * as a result of removing something from the object list hash
+ * table as set up during virDomainObjListNew. */
virObjectRef(dom);
rc = callback(dom, new_name, flags, opaque);
if (dom) {
if (!liveStatus)
dom->persistent = 1;
- virObjectUnlock(dom);
+ virDomainObjEndAPI(&dom);
} else {
VIR_ERROR(_("Failed to load config for domain '%s'"), entry->d_name);
}
error:
libxlDomainCleanup(driver, vm);
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemoveLocked(driver->domains, vm);
-
- /* virDomainObjListRemoveLocked leaves the object unlocked,
- * lock it again to factorize more code. */
- virObjectLock(vm);
- }
goto cleanup;
}
0,
&oldDef)))
goto cleanup;
-
def = NULL;
vm->persistent = 1;
libxl_dominfo_dispose(&d_info);
virDomainDefFree(def);
virDomainDefFree(oldDef);
- if (vm)
- virObjectUnlock(vm);
+ virDomainObjEndAPI(&vm);
virObjectUnref(cfg);
return ret;
}
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL)))
goto cleanup;
- virObjectRef(vm);
def = NULL;
if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) {
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
goto cleanup;
}
if (libxlDomainStartNew(driver, vm,
(flags & VIR_DOMAIN_START_PAUSED) != 0) < 0) {
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
goto endjob;
}
VIR_DOMAIN_EVENT_STOPPED_DESTROYED);
libxlDomainCleanup(driver, vm);
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
ret = 0;
libxlDriverPrivatePtr driver = dom->conn->privateData;
virDomainObjPtr vm;
int ret = -1;
- bool remove_dom = false;
#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME
virReportUnsupportedError();
goto endjob;
if (!vm->persistent)
- remove_dom = true;
+ virDomainObjListRemove(driver->domains, vm);
ret = 0;
libxlDomainObjEndJob(driver, vm);
cleanup:
- if (remove_dom && vm) {
- virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
virDomainObjEndAPI(&vm);
return ret;
}
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL)))
goto cleanup;
- virObjectRef(vm);
def = NULL;
if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) {
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
goto cleanup;
}
ret = libxlDomainStartRestore(driver, vm,
(flags & VIR_DOMAIN_SAVE_PAUSED) != 0,
fd, hdr.version);
- if (ret < 0 && !vm->persistent) {
+ if (ret < 0 && !vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
libxlDomainObjEndJob(driver, vm);
libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver);
virDomainObjPtr vm;
virObjectEventPtr event = NULL;
- bool remove_dom = false;
bool paused = false;
int ret = -1;
event = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_CRASHED);
if (!vm->persistent)
- remove_dom = true;
+ virDomainObjListRemove(driver->domains, vm);
}
ret = 0;
libxlDomainObjEndJob(driver, vm);
cleanup:
- if (remove_dom && vm) {
- virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
virDomainObjEndAPI(&vm);
if (event)
libxlDomainEventQueue(driver, event);
virDomainObjPtr vm = NULL;
char *name = NULL;
int ret = -1;
- bool remove_dom = false;
virCheckFlags(0, -1);
goto endjob;
if (!vm->persistent)
- remove_dom = true;
+ virDomainObjListRemove(driver->domains, vm);
ret = 0;
libxlDomainObjEndJob(driver, vm);
cleanup:
- if (remove_dom && vm) {
- virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
virDomainObjEndAPI(&vm);
VIR_FREE(name);
return ret;
0,
&oldDef)))
goto cleanup;
-
- virObjectRef(vm);
def = NULL;
+
vm->persistent = 1;
if (virDomainSaveConfig(cfg->configDir,
cfg->caps,
vm->newDef ? vm->newDef : vm->def) < 0) {
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
goto cleanup;
}
event = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_UNDEFINED,
VIR_DOMAIN_EVENT_UNDEFINED_REMOVED);
- if (virDomainObjIsActive(vm)) {
+ if (virDomainObjIsActive(vm))
vm->persistent = 0;
- } else {
+ else
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
ret = 0;
int recvfd = args->recvfd;
size_t i;
int ret;
- bool remove_dom = 0;
virObjectRef(vm);
virObjectLock(vm);
args->migcookie->xenMigStreamVer);
if (ret < 0 && !vm->persistent)
- remove_dom = true;
+ virDomainObjListRemove(driver->domains, vm);
/* Remove all listen socks from event handler, and close them. */
for (i = 0; i < nsocks; i++) {
libxlDomainObjEndJob(driver, vm);
cleanup:
- if (remove_dom) {
- virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
virDomainObjEndAPI(&vm);
}
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL)))
goto error;
-
- virObjectRef(vm);
*def = NULL;
+
priv = vm->privateData;
if (taint_hook) {
VIR_FORCE_CLOSE(dataFD[0]);
virObjectUnref(args);
/* Remove virDomainObj from domain list */
- if (vm) {
+ if (vm)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
done:
virDomainObjEndAPI(&vm);
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL)))
goto error;
-
- virObjectRef(vm);
*def = NULL;
+
priv = vm->privateData;
if (taint_hook) {
priv->migrationPort = 0;
}
/* Remove virDomainObj from domain list */
- if (vm) {
+ if (vm)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
done:
VIR_FREE(xmlout);
VIR_DOMAIN_SHUTOFF_FAILED);
event = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_FAILED);
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- /* Caller passed a locked vm and expects the same on return */
- virObjectLock(vm);
- }
}
if (event)
if (flags & VIR_MIGRATE_UNDEFINE_SOURCE)
virDomainDeleteConfig(cfg->configDir, cfg->autostartDir, vm);
- if (!vm->persistent || (flags & VIR_MIGRATE_UNDEFINE_SOURCE)) {
+ if (!vm->persistent || (flags & VIR_MIGRATE_UNDEFINE_SOURCE))
virDomainObjListRemove(driver->domains, vm);
- /* Caller passed a locked vm and expects the same on return */
- virObjectLock(vm);
- }
ret = 0;
0, &oldDef)))
goto cleanup;
- virObjectRef(vm);
def = NULL;
vm->persistent = 1;
if (virDomainSaveConfig(cfg->configDir, driver->caps,
vm->newDef ? vm->newDef : vm->def) < 0) {
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
goto cleanup;
}
VIR_DOMAIN_EVENT_UNDEFINED,
VIR_DOMAIN_EVENT_UNDEFINED_REMOVED);
- if (virDomainObjIsActive(vm)) {
+ if (virDomainObjIsActive(vm))
vm->persistent = 0;
- } else {
+ else
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
ret = 0;
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL)))
goto cleanup;
- virObjectRef(vm);
def = NULL;
if (virLXCDomainObjBeginJob(driver, vm, LXC_JOB_MODIFY) < 0) {
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
goto cleanup;
}
VIR_DOMAIN_RUNNING_BOOTED) < 0) {
virDomainAuditStart(vm, "booted", false);
virLXCDomainObjEndJob(driver, vm);
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
goto cleanup;
}
endjob:
virLXCDomainObjEndJob(driver, vm);
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
cleanup:
virDomainObjEndAPI(&vm);
} else {
VIR_DEBUG("Stop event has already been sent");
}
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- vm = NULL;
- }
} else {
int ret = virLXCProcessReboot(driver, vm);
virDomainAuditStop(vm, "reboot");
event = virDomainEventLifecycleNewFromObj(vm,
VIR_DOMAIN_EVENT_STOPPED,
priv->stopReason);
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- vm = NULL;
- }
}
}
- if (vm)
- virObjectUnlock(vm);
+ /* NB: virLXCProcessConnectMonitor will perform the virObjectRef(vm)
+ * before adding monitorCallbacks. Since we are now done with the @vm
+ * we can Unref/Unlock */
+ virDomainObjEndAPI(&vm);
if (event)
virObjectEventStateQueue(driver->domainEventState, event);
}
goto cleanup;
/* Hold an extra reference because we can't allow 'vm' to be
- * deleted while the monitor is active */
+ * deleted while the monitor is active. This will be unreffed
+ * during EOFNotify processing. */
virObjectRef(vm);
monitor = virLXCMonitorNew(vm, cfg->stateDir, &monitorCallbacks);
/* XXX OpenVZ doesn't appear to have concept of a transient domain */
dom->persistent = 1;
- virObjectUnlock(dom);
+ virDomainObjEndAPI(&dom);
dom = NULL;
def = NULL;
}
cleanup:
virDomainDefFree(vmdef);
- if (vm)
- virObjectUnlock(vm);
+ virDomainObjEndAPI(&vm);
openvzDriverUnlock(driver);
return dom;
}
cleanup:
virDomainDefFree(vmdef);
- if (vm)
- virObjectUnlock(vm);
+ virDomainObjEndAPI(&vm);
openvzDriverUnlock(driver);
return dom;
}
if (virRun(prog, NULL) < 0)
goto cleanup;
- if (virDomainObjIsActive(vm)) {
+ if (virDomainObjIsActive(vm))
vm->persistent = 0;
- } else {
+ else
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
ret = 0;
error:
virDomainDefFree(def);
- if (vm) {
+ if (vm)
virDomainObjListRemove(driver->domains, vm);
- vm = NULL;
- }
done:
VIR_FREE(my_hostname);
virURIFree(uri);
- if (vm)
- virObjectUnlock(vm);
+ virDomainObjEndAPI(&vm);
return ret;
}
VIR_DEBUG("Domain '%s' successfully migrated", vm->def->name);
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
ret = 0;
VIR_FREE(snapDir);
}
- virObjectRef(vm);
-
virDomainObjListRemove(driver->domains, vm);
- /*
- * virDomainObjListRemove() leaves the domain unlocked so it can
- * be unref'd for other drivers that depend on that, but we still
- * need to reset a job and we have a reference from the API that
- * called this function. So we need to lock it back. This is
- * just a workaround for the qemu driver.
- *
- * XXX: Ideally, the global handling of domain objects and object
- * lists would be refactored so we don't need hacks like
- * this, but since that requires refactor of all drivers,
- * it's a work for another day.
- */
- virObjectLock(vm);
+
virObjectUnref(cfg);
- virObjectUnref(vm);
}
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL)))
goto cleanup;
- virObjectRef(vm);
def = NULL;
if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START,
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL)))
goto cleanup;
- virObjectRef(vm);
def = NULL;
if (flags & VIR_DOMAIN_SAVE_RUNNING)
driver->xmlopt,
0, &oldDef)))
goto cleanup;
-
- virObjectRef(vm);
def = NULL;
+
if (qemuDomainHasBlockjob(vm, true)) {
virReportError(VIR_ERR_BLOCK_COPY_ACTIVE, "%s",
_("domain has active block job"));
NULL)))
goto cleanup;
- virObjectRef(vm);
def = NULL;
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) {
VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
NULL)))
goto cleanup;
-
- virObjectRef(vm);
*def = NULL;
+
priv = vm->privateData;
if (VIR_STRDUP(priv->origname, origname) < 0)
goto cleanup;
int num, ret = -1;
size_t i;
xmlNodePtr *nodes = NULL;
- virDomainObjPtr obj;
+ virDomainObjPtr obj = NULL;
num = virXPathNodeSet("/node/domain", ctxt, &nodes);
if (num < 0)
goto error;
}
- if (testParseDomainSnapshots(privconn, obj, file, ctxt) < 0) {
- virObjectUnlock(obj);
+ if (testParseDomainSnapshots(privconn, obj, file, ctxt) < 0)
goto error;
- }
nsdata = def->namespaceData;
obj->persistent = !nsdata->transient;
if (nsdata->runstate != VIR_DOMAIN_SHUTOFF) {
if (testDomainStartState(privconn, obj,
- VIR_DOMAIN_RUNNING_BOOTED) < 0) {
- virObjectUnlock(obj);
+ VIR_DOMAIN_RUNNING_BOOTED) < 0)
goto error;
- }
} else {
testDomainShutdownState(NULL, obj, 0);
}
virDomainObjSetState(obj, nsdata->runstate, 0);
- virObjectUnlock(obj);
+ virDomainObjEndAPI(&obj);
}
ret = 0;
error:
+ virDomainObjEndAPI(&obj);
VIR_FREE(nodes);
return ret;
}
def = NULL;
if (testDomainStartState(privconn, dom, VIR_DOMAIN_RUNNING_BOOTED) < 0) {
- if (!dom->persistent) {
+ if (!dom->persistent)
virDomainObjListRemove(privconn->domains, dom);
- dom = NULL;
- }
goto cleanup;
}
ret = virGetDomain(conn, dom->def->name, dom->def->uuid, dom->def->id);
cleanup:
- if (dom)
- virObjectUnlock(dom);
+ virDomainObjEndAPI(&dom);
testObjectEventQueue(privconn, event);
virDomainDefFree(def);
testDriverUnlock(privconn);
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_DESTROYED);
- if (!privdom->persistent) {
+ if (!privdom->persistent)
virDomainObjListRemove(privconn->domains, privdom);
- virObjectLock(privdom);
- }
ret = 0;
cleanup:
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN);
- if (!privdom->persistent) {
+ if (!privdom->persistent)
virDomainObjListRemove(privconn->domains, privdom);
- virObjectLock(privdom);
- }
ret = 0;
cleanup:
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN);
- if (!privdom->persistent) {
+ if (!privdom->persistent)
virDomainObjListRemove(privconn->domains, privdom);
- virObjectLock(privdom);
- }
}
ret = 0;
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_SAVED);
- if (!privdom->persistent) {
+ if (!privdom->persistent)
virDomainObjListRemove(privconn->domains, privdom);
- virObjectLock(privdom);
- }
ret = 0;
cleanup:
def = NULL;
if (testDomainStartState(privconn, dom, VIR_DOMAIN_RUNNING_RESTORED) < 0) {
- if (!dom->persistent) {
+ if (!dom->persistent)
virDomainObjListRemove(privconn->domains, dom);
- dom = NULL;
- }
goto cleanup;
}
virDomainDefFree(def);
VIR_FREE(xml);
VIR_FORCE_CLOSE(fd);
- if (dom)
- virObjectUnlock(dom);
+ virDomainObjEndAPI(&dom);
testObjectEventQueue(privconn, event);
return ret;
}
event = virDomainEventLifecycleNewFromObj(privdom,
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_CRASHED);
- if (!privdom->persistent) {
+ if (!privdom->persistent)
virDomainObjListRemove(privconn->domains, privdom);
- virObjectLock(privdom);
- }
}
ret = 0;
cleanup:
virDomainDefFree(def);
virDomainDefFree(oldDef);
- if (dom)
- virObjectUnlock(dom);
+ virDomainObjEndAPI(&dom);
testObjectEventQueue(privconn, event);
return ret;
}
VIR_DOMAIN_EVENT_UNDEFINED_REMOVED);
privdom->hasManagedSave = false;
- if (virDomainObjIsActive(privdom)) {
+ if (virDomainObjIsActive(privdom))
privdom->persistent = 0;
- } else {
+ else
virDomainObjListRemove(privconn->domains, privdom);
- virObjectLock(privdom);
- }
ret = 0;
event = virDomainEventLifecycleNewFromObj(dom,
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN);
- if (!dom->persistent) {
+ if (!dom->persistent)
virDomainObjListRemove(driver->domains, dom);
- virObjectLock(dom);
- }
} else if (e.mask & (IN_CREATE | IN_MODIFY)) {
VIR_DEBUG("Got inotify domain startup '%s'", name);
if (virDomainObjIsActive(dom)) {
event = virDomainEventLifecycleNewFromObj(dom,
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_FAILED);
- if (!dom->persistent) {
+ if (!dom->persistent)
virDomainObjListRemove(driver->domains, dom);
- virObjectLock(dom);
- }
} else if (umlIdentifyChrPTY(driver, dom) < 0) {
VIR_WARN("Could not identify character devices for new domain");
umlShutdownVMDaemon(driver, dom,
event = virDomainEventLifecycleNewFromObj(dom,
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_FAILED);
- if (!dom->persistent) {
+ if (!dom->persistent)
virDomainObjListRemove(driver->domains, dom);
- virObjectLock(dom);
- }
}
}
virDomainObjEndAPI(&dom);
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_DESTROYED);
- if (!dom->persistent) {
+ if (!dom->persistent)
virDomainObjListRemove(data->driver->domains, dom);
- virObjectLock(dom);
- }
virDomainObjEndAPI(&dom);
if (event)
if (umlStartVMDaemon(conn, driver, vm,
(flags & VIR_DOMAIN_START_AUTODESTROY)) < 0) {
virDomainAuditStart(vm, "booted", false);
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- vm = NULL;
- }
goto cleanup;
}
virDomainAuditStart(vm, "booted", true);
cleanup:
virDomainDefFree(def);
- if (vm)
- virObjectUnlock(vm);
+ virDomainObjEndAPI(&vm);
if (event)
umlDomainEventQueue(driver, event);
umlDriverUnlock(driver);
event = virDomainEventLifecycleNewFromObj(vm,
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_DESTROYED);
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
ret = 0;
cleanup:
if (virDomainSaveConfig(driver->configDir, driver->caps,
vm->newDef ? vm->newDef : vm->def) < 0) {
virDomainObjListRemove(driver->domains, vm);
- vm = NULL;
goto cleanup;
}
cleanup:
virDomainDefFree(def);
- if (vm)
- virObjectUnlock(vm);
+ virDomainObjEndAPI(&vm);
umlDriverUnlock(driver);
return dom;
}
if (virDomainDeleteConfig(driver->configDir, driver->autostartDir, vm) < 0)
goto cleanup;
- if (virDomainObjIsActive(vm)) {
+ if (virDomainObjIsActive(vm))
vm->persistent = 0;
- } else {
+ else
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
ret = 0;
VIR_DOMAIN_RUNNING_UNKNOWN);
vm->persistent = 1;
- virObjectUnlock(vm);
+ virDomainObjEndAPI(&vm);
vmdef = NULL;
- vm = NULL;
}
ret = 0;
if (vmwareStopVM(driver, vm, VIR_DOMAIN_SHUTOFF_SHUTDOWN) < 0)
goto cleanup;
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
ret = 0;
cleanup:
vmdef = NULL;
if (vmwareStartVM(driver, vm) < 0) {
- if (!vm->persistent) {
+ if (!vm->persistent)
virDomainObjListRemove(driver->domains, vm);
- vm = NULL;
- }
goto cleanup;
}
virDomainDefFree(vmdef);
VIR_FREE(vmx);
VIR_FREE(vmxPath);
- if (vm)
- virObjectUnlock(vm);
+ virDomainObjEndAPI(&vm);
vmwareDriverUnlock(driver);
return dom;
}
if (vmwareUpdateVMStatus(driver, vm) < 0)
goto cleanup;
- if (virDomainObjIsActive(vm)) {
+ if (virDomainObjIsActive(vm))
vm->persistent = 0;
- } else {
+ else
virDomainObjListRemove(driver->domains, vm);
- virObjectLock(vm);
- }
ret = 0;
goto cleanup;
virDomainObjListRemove(driver->domains, dom);
- virObjectLock(dom);
ret = 0;
goto error;
}
- virObjectRef(dom);
pdom = dom->privateData;
pdom->sdkdom = sdkdom;
PrlHandle_AddRef(sdkdom);
VIR_DOMAIN_EVENT_UNDEFINED_REMOVED);
virDomainObjListRemove(driver->domains, dom);
- virObjectLock(dom);
virDomainObjEndAPI(&dom);
return;
}
VIR_DOMAIN_EVENT_UNDEFINED_REMOVED);
virDomainObjListRemove(driver->domains, dom);
- virObjectLock(dom);
ret = 0;
cleanup: