From: Jiri Denemark Date: Thu, 8 Sep 2016 13:16:58 +0000 (+0200) Subject: Add helper for removing transient definition X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=97a87333a0ac8b6b33bf4c45a7b1a526caa554cb;p=libvirt.git Add helper for removing transient definition The code for replacing domain's transient definition with the persistent one is repeated in several places and we'll need to add one more. Let's make a nice helper for it. Signed-off-by: Jiri Denemark --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c8c4f61cda..db030cc001 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2981,6 +2981,25 @@ virDomainObjSetDefTransient(virCapsPtr caps, return ret; } + +/* + * Remove the running configuration and replace it with the persistent one. + * + * @param domain domain object pointer + */ +void +virDomainObjRemoveTransientDef(virDomainObjPtr domain) +{ + if (!domain->newDef) + return; + + virDomainDefFree(domain->def); + domain->def = domain->newDef; + domain->def->id = -1; + domain->newDef = NULL; +} + + /* * Return the persistent domain configuration. If domain is transient, * return the running config. diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 0fe4154553..79dda1c321 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2577,6 +2577,7 @@ void virDomainObjAssignDef(virDomainObjPtr domain, int virDomainObjSetDefTransient(virCapsPtr caps, virDomainXMLOptionPtr xmlopt, virDomainObjPtr domain); +void virDomainObjRemoveTransientDef(virDomainObjPtr domain); virDomainDefPtr virDomainObjGetPersistentDef(virCapsPtr caps, virDomainXMLOptionPtr xmlopt, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a5fa30562f..6a77e469f1 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -421,6 +421,7 @@ virDomainObjGetShortName; virDomainObjGetState; virDomainObjNew; virDomainObjParseNode; +virDomainObjRemoveTransientDef; virDomainObjSetDefTransient; virDomainObjSetMetadata; virDomainObjSetState; diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index a85dd75946..43f4a7f32b 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -811,13 +811,7 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver, VIR_FREE(xml); } - if (vm->newDef) { - virDomainDefFree(vm->def); - vm->def = vm->newDef; - vm->def->id = -1; - vm->newDef = NULL; - } - + virDomainObjRemoveTransientDef(vm); virObjectUnref(cfg); } diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index 7703fe18fe..bce6a2f70e 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -246,12 +246,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver, VIR_FREE(xml); } - if (vm->newDef) { - virDomainDefFree(vm->def); - vm->def = vm->newDef; - vm->def->id = -1; - vm->newDef = NULL; - } + virDomainObjRemoveTransientDef(vm); virObjectUnref(cfg); } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index e6e91dffd8..75965798e4 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6039,12 +6039,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, VIR_FREE(xml); } - if (vm->newDef) { - virDomainDefFree(vm->def); - vm->def = vm->newDef; - vm->def->id = -1; - vm->newDef = NULL; - } + virDomainObjRemoveTransientDef(vm); endjob: if (asyncJob != QEMU_ASYNC_JOB_NONE) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 53cfa3cf78..8dd7579874 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -588,14 +588,9 @@ testDomainShutdownState(virDomainPtr domain, virDomainObjPtr privdom, virDomainShutoffReason reason) { - if (privdom->newDef) { - virDomainDefFree(privdom->def); - privdom->def = privdom->newDef; - privdom->newDef = NULL; - } - + virDomainObjRemoveTransientDef(privdom); virDomainObjSetState(privdom, VIR_DOMAIN_SHUTOFF, reason); - privdom->def->id = -1; + if (domain) domain->id = -1; } diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index b9784538d8..4f25f76c4e 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -1135,12 +1135,7 @@ static int umlStartVMDaemon(virConnectPtr conn, if (ret < 0) { virDomainConfVMNWFilterTeardown(vm); umlCleanupTapDevices(vm); - if (vm->newDef) { - virDomainDefFree(vm->def); - vm->def = vm->newDef; - vm->def->id = -1; - vm->newDef = NULL; - } + virDomainObjRemoveTransientDef(vm); } /* NB we don't mark it running here - we do that async @@ -1182,12 +1177,7 @@ static void umlShutdownVMDaemon(struct uml_driver *driver, /* Stop autodestroy in case guest is restarted */ umlProcessAutoDestroyRemove(driver, vm); - if (vm->newDef) { - virDomainDefFree(vm->def); - vm->def = vm->newDef; - vm->def->id = -1; - vm->newDef = NULL; - } + virDomainObjRemoveTransientDef(vm); driver->nactive--; if (!driver->nactive && driver->inhibitCallback)