From: Osier Yang Date: Fri, 19 Aug 2011 13:53:39 +0000 (+0800) Subject: xen: Allow to undefine a running domain (xm_internal) X-Git-Tag: v0.9.5-rc1~197 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=49186deda62161599877b0de6f7f4345c50d842a;p=thirdparty%2Flibvirt.git xen: Allow to undefine a running domain (xm_internal) --- diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c index 95387c9229..5c8a017757 100644 --- a/src/xen/xm_internal.c +++ b/src/xen/xm_internal.c @@ -1218,8 +1218,6 @@ int xenXMDomainUndefine(virDomainPtr domain) { return (-1); } - if (domain->id != -1) - return (-1); if (domain->conn->flags & VIR_CONNECT_RO) return (-1); @@ -1235,13 +1233,17 @@ int xenXMDomainUndefine(virDomainPtr domain) { if (unlink(entry->filename) < 0) goto cleanup; - /* Remove the name -> filename mapping */ - if (virHashRemoveEntry(priv->nameConfigMap, domain->name) < 0) - goto cleanup; + if (virDomainObjIsActive(vm)) { + vm->persistent = 0; + } else { + /* Remove the name -> filename mapping */ + if (virHashRemoveEntry(priv->nameConfigMap, domain->name) < 0) + goto cleanup; - /* Remove the config record itself */ - if (virHashRemoveEntry(priv->configCache, entry->filename) < 0) - goto cleanup; + /* Remove the config record itself */ + if (virHashRemoveEntry(priv->configCache, entry->filename) < 0) + goto cleanup; + } ret = 0;