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 <jdenemar@xxxxxxxxxx> --- src/conf/domain_conf.c | 19 +++++++++++++++++++ src/conf/domain_conf.h | 1 + src/libvirt_private.syms | 1 + src/libxl/libxl_domain.c | 8 +------- src/lxc/lxc_process.c | 7 +------ src/qemu/qemu_process.c | 7 +------ src/test/test_driver.c | 9 ++------- src/uml/uml_driver.c | 14 ++------------ 8 files changed, 28 insertions(+), 38 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c8c4f61..db030cc 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 0fe4154..79dda1c 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 a5fa305..6a77e46 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 a85dd75..43f4a7f 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 7703fe1..bce6a2f 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 e6e91df..7596579 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 53cfa3c..8dd7579 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 b978453..4f25f76 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) -- 2.10.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list