]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Allow to undefine a running domain
authorOsier Yang <jyang@redhat.com>
Fri, 19 Aug 2011 13:49:37 +0000 (21:49 +0800)
committerOsier Yang <jyang@redhat.com>
Fri, 19 Aug 2011 13:49:37 +0000 (21:49 +0800)
src/qemu/qemu_driver.c

index 421a98ecd7077027f3efe64ec0e4f6f2f8841662..c8dda73328b80f5807feefc09a80aab25260a276 100644 (file)
@@ -4720,12 +4720,6 @@ qemuDomainUndefineFlags(virDomainPtr dom,
         goto cleanup;
     }
 
-    if (virDomainObjIsActive(vm)) {
-        qemuReportError(VIR_ERR_OPERATION_INVALID,
-                        "%s", _("cannot delete active domain"));
-        goto cleanup;
-    }
-
     if (!vm->persistent) {
         qemuReportError(VIR_ERR_OPERATION_INVALID,
                         "%s", _("cannot undefine transient domain"));
@@ -4760,9 +4754,19 @@ qemuDomainUndefineFlags(virDomainPtr dom,
                                      VIR_DOMAIN_EVENT_UNDEFINED_REMOVED);
 
     VIR_INFO("Undefining domain '%s'", vm->def->name);
-    virDomainRemoveInactive(&driver->domains,
-                            vm);
-    vm = NULL;
+
+    /* If the domain is active, keep it running but set it as transient.
+     * domainDestroy and domainShutdown will take care of removing the
+     * domain obj from the hash table.
+     */
+    if (virDomainObjIsActive(vm)) {
+        vm->persistent = 0;
+    } else {
+        virDomainRemoveInactive(&driver->domains,
+                                vm);
+        vm = NULL;
+    }
+
     ret = 0;
 
 cleanup: