Review-fixes, changes since last time:
- persistent flag is not reset to 0 anymore
- dom->id =vm->def->id is moved after domain startup
- duplicate of start_flags |= VIR_BHYVE_PROCESS_START_AUTODESTROY removed
- flag VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE is used instead of zero
- virDomainObjListRemove is called for not persistent domains in case of failure
- unnecessary checkActive removed
======== DIFF BETWEEN PATCHv1 and PATCHv2 =================================
diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
index 1357e07..4ac89c1 100644
--- a/src/bhyve/bhyve_driver.c
+++ b/src/bhyve/bhyve_driver.c
@@ -1139,39 +1133,36 @@ bhyveDomainCreateXML(virConnectPtr conn,
if (!(vm = virDomainObjListAdd(privconn->domains, def,
privconn->xmlopt,
- 0, NULL)))
+ VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, NULL)))
goto cleanup;
def = NULL;
- vm->persistent = 0;
dom = virGetDomain(conn, vm->def->name, vm->def->uuid);
if (!dom)
goto cleanup;
- dom->id = vm->def->id;
-
- if (flags & VIR_DOMAIN_START_AUTODESTROY)
- start_flags |= VIR_BHYVE_PROCESS_START_AUTODESTROY;
-
- if (virDomainObjIsActive(vm)) {
- virReportError(VIR_ERR_OPERATION_INVALID,
- "%s", _("Domain is already running"));
- goto cleanup;
- }
-
ret = virBhyveProcessStart(dom->conn, privconn, vm,
VIR_DOMAIN_RUNNING_BOOTED,
start_flags);
if (ret) {
virObjectUnref(dom);
dom = NULL;
+
+ /* If domain is not persistent, remove its data */
+ if (!vm->persistent) {
+ virDomainObjListRemove(privconn->domains, vm);
+ vm = NULL;
+ }
goto cleanup;
}
+ dom->id = vm->def->id;
+
cleanup:
virObjectUnref(caps);
virDomainDefFree(def);
- virObjectUnlock(vm);
+ if (vm)
+ virObjectUnlock(vm);
return dom;
}
======== END OF DIFF BETWEEN PATCHv1 and PATCHv2 =========================
Wojciech Macek (1):
bhyve: domainCreateXML
src/bhyve/bhyve_driver.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
--
1.9.0