---
src/libxl/libxl_driver.c | 32 ++++++++++++++++++++++++++++----
1 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 808480f..f04931b 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -220,10 +220,8 @@ libxlDoNodeGetInfo(libxlDriverPrivatePtr driver, virNodeInfoPtr
info)
static char *
libxlDomainManagedSavePath(libxlDriverPrivatePtr driver, virDomainObjPtr vm) {
char *ret;
- char uuidstr[VIR_UUID_STRING_BUFLEN];
- virUUIDFormat(vm->def->uuid, uuidstr);
- if (virAsprintf(&ret, "%s/%s.save", driver->saveDir, uuidstr) <
0) {
+ if (virAsprintf(&ret, "%s/%s.save", driver->saveDir,
vm->def->name) < 0) {
virReportOOMError();
return NULL;
}
@@ -2716,13 +2714,17 @@ cleanup:
}
static int
-libxlDomainUndefine(virDomainPtr dom)
+libxlDomainUndefineWithFlags(virDomainPtr dom,
+ unsigned int flags)
{
libxlDriverPrivatePtr driver = dom->conn->privateData;
virDomainObjPtr vm;
virDomainEventPtr event = NULL;
+ char *name = NULL;
int ret = -1;
+ virCheckFlags(VIR_DOMAIN_UNDEFINE_MANAGED_STATE, -1);
+
libxlDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
@@ -2746,6 +2748,20 @@ libxlDomainUndefine(virDomainPtr dom)
"%s", _("cannot undefine transient domain"));
goto cleanup;
}
+
+ if (flags & VIR_DOMAIN_UNDEFINE_MANAGED_STATE) {
+ name = libxlDomainManagedSavePath(driver, vm);
+
+ if (name == NULL)
+ goto cleanup;
+
+ if (virFileExists(name) && (unlink(name) < 0)) {
+ libxlError(VIR_ERR_INTERNAL_ERROR,
+ _("failed on removing domain managed state "
+ "file '%s'"), name);
+ goto cleanup;
+ }
+ }
if (virDomainDeleteConfig(driver->configDir,
driver->autostartDir,
@@ -2760,6 +2776,7 @@ libxlDomainUndefine(virDomainPtr dom)
ret = 0;
cleanup:
+ VIR_FREE(name);
if (vm)
virDomainObjUnlock(vm);
if (event)
@@ -2769,6 +2786,12 @@ libxlDomainUndefine(virDomainPtr dom)
}
static int
+libxlDomainUndefine(virDomainPtr dom)
+{
+ return libxlDomainUndefineWithFlags(dom, 0);
+}
+
+static int
libxlDomainChangeEjectableMedia(libxlDomainObjPrivatePtr priv,
virDomainObjPtr vm, virDomainDiskDefPtr disk)
{
@@ -3828,6 +3851,7 @@ static virDriver libxlDriver = {
.domainCreateWithFlags = libxlDomainCreateWithFlags, /* 0.9.0 */
.domainDefineXML = libxlDomainDefineXML, /* 0.9.0 */
.domainUndefine = libxlDomainUndefine, /* 0.9.0 */
+ .domainUndefineWithFlags = libxlDomainUndefineWithFlags, /* 0.9.4 */
.domainAttachDevice = libxlDomainAttachDevice, /* 0.9.2 */
.domainAttachDeviceFlags = libxlDomainAttachDeviceFlags, /* 0.9.2 */
.domainDetachDevice = libxlDomainDetachDevice, /* 0.9.2 */
--
1.7.6