if (virDomainSnapshotIsExternal(snap)) {
if (!(tmpsnapdef = virDomainSnapshotDefNew()))
- return -1;
+ goto error;
if (qemuSnapshotRevertExternalPrepare(vm, tmpsnapdef, snap,
*config, *inactiveConfig,
- &memdata) < 0) {
- return -1;
- }
+ &memdata) < 0)
+ goto error;
} else {
loadSnap = snap;
}
VIR_ASYNC_JOB_SNAPSHOT,
VIR_QEMU_PROCESS_STOP_MIGRATED);
}
- return -1;
+ goto error;
}
detail = VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT;
if (virDomainSnapshotIsExternal(snap)) {
if (qemuSnapshotRevertExternalActive(vm, tmpsnapdef) < 0)
- return -1;
+ goto error;
qemuSnapshotRevertExternalFinish(vm, tmpsnapdef, snap);
}
if (!virDomainObjIsActive(vm)) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("guest unexpectedly quit"));
- return -1;
+ goto error;
}
rc = qemuProcessStartCPUs(driver, vm,
VIR_DOMAIN_RUNNING_FROM_SNAPSHOT,
VIR_ASYNC_JOB_SNAPSHOT);
if (rc < 0)
- return -1;
+ goto error;
}
return qemuSnapshotRevertWriteMetadata(vm, snap, driver, cfg, defined);
+
+ error:
+ if (!virDomainObjIsActive(vm))
+ qemuDomainRemoveInactive(driver, vm, 0, false);
+
+ return -1;
}