]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix reporting of errors for p2p migration
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 19 Jul 2011 14:51:08 +0000 (10:51 -0400)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 19 Jul 2011 15:20:34 +0000 (11:20 -0400)
Starting/ending jobs when closing the connection may reset any
error which was reported earlier in p2p migration. We must
save the original error before doing so. This means we can also
just call virConnectClose as normal, instead of virUnrefConnect

* src/qemu/qemu_migration.c: Preserve errors in p2p migration

src/qemu/qemu_migration.c

index dfa80e35b2812dd99a9353f32f3fe4353919c607..1803b9f5a934d121d9902b6f3cd0f1b3515b3e83 100644 (file)
@@ -2141,6 +2141,8 @@ static int doPeer2PeerMigrate(struct qemud_driver *driver,
     int ret = -1;
     virConnectPtr dconn = NULL;
     bool p2p;
+    virErrorPtr orig_err = NULL;
+
     VIR_DEBUG("driver=%p, sconn=%p, vm=%p, xmlin=%s, dconnuri=%s, "
               "uri=%s, flags=%lx, dname=%s, resource=%lu",
               driver, sconn, vm, NULLSTR(xmlin), NULLSTR(dconnuri),
@@ -2191,10 +2193,14 @@ static int doPeer2PeerMigrate(struct qemud_driver *driver,
                                   dconnuri, flags, dname, resource);
 
 cleanup:
-    /* don't call virConnectClose(), because that resets any pending errors */
+    orig_err = virSaveLastError();
     qemuDomainObjEnterRemoteWithDriver(driver, vm);
-    virUnrefConnect(dconn);
+    virConnectClose(dconn);
     qemuDomainObjExitRemoteWithDriver(driver, vm);
+    if (orig_err) {
+        virSetError(orig_err);
+        virFreeError(orig_err);
+    }
 
     return ret;
 }