]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Report better error message when renaming to existing domain name
authorMartin Kletzander <mkletzan@redhat.com>
Tue, 18 Aug 2015 18:22:02 +0000 (11:22 -0700)
committerMartin Kletzander <mkletzan@redhat.com>
Wed, 19 Aug 2015 21:13:06 +0000 (14:13 -0700)
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
src/qemu/qemu_driver.c

index b6ac075fe3d1a7566366b501a34546fd3787d7f4..a90d30416058296a087dfdc65f34a1ab7d27fded 100644 (file)
@@ -19907,6 +19907,7 @@ static int qemuDomainRename(virDomainPtr dom,
     virQEMUDriverPtr driver = dom->conn->privateData;
     virQEMUDriverConfigPtr cfg = NULL;
     virDomainObjPtr vm = NULL;
+    virDomainObjPtr tmp_dom = NULL;
     virObjectEventPtr event_new = NULL;
     virObjectEventPtr event_old = NULL;
     int ret = -1;
@@ -19961,6 +19962,21 @@ static int qemuDomainRename(virDomainPtr dom,
         goto endjob;
     }
 
+    /*
+     * This is a rather racy check, but still better than reporting
+     * internal error.  And since new_name != name here, there's no
+     * deadlock imminent.
+     */
+    tmp_dom = virDomainObjListFindByName(driver->domains, new_name);
+    if (tmp_dom) {
+        virObjectUnlock(tmp_dom);
+        virObjectUnref(tmp_dom);
+        virReportError(VIR_ERR_OPERATION_INVALID,
+                       _("domain with name '%s' already exists"),
+                       new_name);
+        goto endjob;
+    }
+
     if (VIR_STRDUP(new_dom_name, new_name) < 0)
         goto endjob;