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(a)redhat.com>
---
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