*/
cancelled = ret == 0 && ddomain == NULL ? 1 : 0;
+ /* If finish3 set an error, and we don't have an earlier
+ * one we need to preserve it in case confirm3 overwrites
+ */
+ if (!orig_err)
+ orig_err = virSaveLastError();
+
/*
* If cancelled, then src VM will be restarted, else
* it will be killed
struct qemud_driver *driver = dconn->privateData;
virDomainObjPtr vm;
virDomainPtr dom = NULL;
- virErrorPtr orig_err;
virCheckFlags(VIR_MIGRATE_LIVE |
VIR_MIGRATE_PEER2PEER |
VIR_MIGRATE_NON_SHARED_DISK |
VIR_MIGRATE_NON_SHARED_INC, NULL);
- /* Migration failed. Save the current error so nothing squashes it */
- orig_err = virSaveLastError();
-
qemuDriverLock(driver);
vm = virDomainFindByName(&driver->domains, dname);
if (!vm) {
flags, retcode, false);
cleanup:
- if (orig_err) {
- virSetError(orig_err);
- virFreeError(orig_err);
- }
qemuDriverUnlock(driver);
return dom;
}
{
struct qemud_driver *driver = dconn->privateData;
virDomainObjPtr vm;
- virErrorPtr orig_err;
int ret = -1;
virCheckFlags(VIR_MIGRATE_LIVE |
VIR_MIGRATE_NON_SHARED_DISK |
VIR_MIGRATE_NON_SHARED_INC, -1);
- /* Migration failed. Save the current error so nothing squashes it */
- orig_err = virSaveLastError();
-
qemuDriverLock(driver);
vm = virDomainFindByName(&driver->domains, dname);
if (!vm) {
ret = 0;
cleanup:
- if (orig_err) {
- virSetError(orig_err);
- virFreeError(orig_err);
- }
qemuDriverUnlock(driver);
return ret;
}
struct qemud_driver *driver = domain->conn->privateData;
virDomainObjPtr vm;
int ret = -1;
- virErrorPtr orig_err;
virCheckFlags(VIR_MIGRATE_LIVE |
VIR_MIGRATE_PEER2PEER |
cookiein, cookieinlen,
flags, cancelled);
- orig_err = virSaveLastError();
-
if (qemuDomainObjEndJob(vm) == 0) {
vm = NULL;
} else if (!virDomainObjIsActive(vm) &&
vm = NULL;
}
- if (orig_err) {
- virSetError(orig_err);
- virFreeError(orig_err);
- }
-
cleanup:
if (vm)
virDomainObjUnlock(vm);
*/
cancelled = ret == 0 && ddomain == NULL ? 1 : 0;
+ /* If finish3 set an error, and we don't have an earlier
+ * one we need to preserve it in case confirm3 overwrites
+ */
+ if (!orig_err)
+ orig_err = virSaveLastError();
+
/*
* If cancelled, then src VM will be restarted, else
* it will be killed
"cookieout=%p, cookieoutlen=%p, flags=%lu, retcode=%d",
driver, dconn, vm, NULLSTR(cookiein), cookieinlen,
cookieout, cookieoutlen, flags, retcode);
+ virErrorPtr orig_err = NULL;
priv = vm->privateData;
if (priv->jobActive != QEMU_JOB_MIGRATION_IN) {
*/
if (qemuProcessStartCPUs(driver, vm, dconn,
VIR_DOMAIN_RUNNING_MIGRATED) < 0) {
+ if (virGetLastError() == NULL)
+ qemuReportError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("resume operation failed"));
+ /* Need to save the current error, in case shutting
+ * down the process overwrites it
+ */
+ orig_err = virSaveLastError();
+
/*
* In v3 protocol, the source VM is still available to
* restart during confirm() step, so we kill it off
vm = NULL;
}
}
- if (virGetLastError() == NULL)
- qemuReportError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("resume operation failed"));
goto endjob;
}
}
if (event)
qemuDomainEventQueue(driver, event);
qemuMigrationCookieFree(mig);
+ if (orig_err) {
+ virSetError(orig_err);
+ virFreeError(orig_err);
+ }
return dom;
}