This is just similiar as changes on qemu driver.
* src/libxl/libxl_driver.c: New callback for libxl_driver,
new function libxlDomainUndefineFlags, and changes libxlDomainUndefine
as a wrapper of libxlDomainUndefineFlags.
---
src/libxl/libxl_driver.c | 31 ++++++++++++++++++++++++++++++-
1 files changed, 30 insertions(+), 1 deletions(-)
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index f938e24..b474eb9 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -2722,11 +2722,13 @@ cleanup:
}
static int
-libxlDomainUndefine(virDomainPtr dom)
+libxlDomainUndefineFlags(virDomainPtr dom,
+ unsigned int flags)
{
libxlDriverPrivatePtr driver = dom->conn->privateData;
virDomainObjPtr vm;
virDomainEventPtr event = NULL;
+ char *name = NULL;
int ret = -1;
libxlDriverLock(driver);
@@ -2753,6 +2755,25 @@ libxlDomainUndefine(virDomainPtr dom)
goto cleanup;
}
+ name = libxlDomainManagedSavePath(driver, vm);
+ if (name == NULL)
+ goto cleanup;
+
+ if (virFileExists(name)) {
+ if ((flags & VIR_DOMAIN_UNDEFINE_MANAGED_STATE) &&
+ (unlink(name) < 0)) {
+ libxlError(VIR_ERR_INTERNAL_ERR,
+ _("Failed on removing domain managed state "
+ "file '%s'"), name);
+ goto cleanup;
+ } else {
+ libxlError(VIR_ERR_INTERNAL_ERR,
+ _("Refusing to undefine with managed state "
+ "file '%s' exists"), name);
+ goto cleanup;
+ }
+ }
+
if (virDomainDeleteConfig(driver->configDir,
driver->autostartDir,
vm) < 0)
@@ -2766,6 +2787,7 @@ libxlDomainUndefine(virDomainPtr dom)
ret = 0;
cleanup:
+ VIR_FREE(name);
if (vm)
virDomainObjUnlock(vm);
if (event)
@@ -2775,6 +2797,12 @@ libxlDomainUndefine(virDomainPtr dom)
}
static int
+libxlDomainUndefine(virDomainPtr dom)
+{
+ return libxlDomainUndefineFlags(dom, 0);
+}
+
+static int
libxlDomainChangeEjectableMedia(libxlDomainObjPrivatePtr priv,
virDomainObjPtr vm, virDomainDiskDefPtr disk)
{
@@ -3834,6 +3862,7 @@ static virDriver libxlDriver = {
.domainCreateWithFlags = libxlDomainCreateWithFlags, /* 0.9.0 */
.domainDefineXML = libxlDomainDefineXML, /* 0.9.0 */
.domainUndefine = libxlDomainUndefine, /* 0.9.0 */
+ .domainUndefineFlags = libxlDomainUndefineFlags, /* 0.9.4 */
.domainAttachDevice = libxlDomainAttachDevice, /* 0.9.2 */
.domainAttachDeviceFlags = libxlDomainAttachDeviceFlags, /* 0.9.2 */
.domainDetachDevice = libxlDomainDetachDevice, /* 0.9.2 */
--
1.7.6