]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
libvirt.c: Preserve MigratePerform failure
authorCole Robinson <crobinso@redhat.com>
Sat, 9 Jan 2010 02:00:31 +0000 (21:00 -0500)
committerCole Robinson <crobinso@redhat.com>
Tue, 12 Jan 2010 15:48:34 +0000 (10:48 -0500)
src/libvirt.c

index 4308573ef833018258398d1da6cebbb3eb503ead..d973907c186a286885924ae2af434b2e766dcca1 100644 (file)
@@ -3135,6 +3135,7 @@ virDomainMigrateVersion2 (virDomainPtr domain,
     char *dom_xml = NULL;
     int cookielen = 0, ret;
     virDomainInfo info;
+    virErrorPtr orig_err = NULL;
 
     /* Prepare the migration.
      *
@@ -3190,6 +3191,10 @@ virDomainMigrateVersion2 (virDomainPtr domain,
     ret = domain->conn->driver->domainMigratePerform
         (domain, cookie, cookielen, uri, flags, dname, bandwidth);
 
+    /* Perform failed. Make sure Finish doesn't overwrite the error */
+    if (ret < 0)
+        orig_err = virSaveLastError();
+
     /* In version 2 of the migration protocol, we pass the
      * status code from the sender to the destination host,
      * so it can do any cleanup if the migration failed.
@@ -3199,6 +3204,10 @@ virDomainMigrateVersion2 (virDomainPtr domain,
         (dconn, dname, cookie, cookielen, uri, flags, ret);
 
  done:
+    if (orig_err) {
+        virSetError(orig_err);
+        virFreeError(orig_err);
+    }
     VIR_FREE (uri_out);
     VIR_FREE (cookie);
     return ddomain;