if (persist_xml) {
persistDef = qemuMigrationPrepareDef(driver, persist_xml,
NULL, NULL);
- if (!persistDef)
- goto cleanup;
} else {
- persistDef = vm->newDef;
+ persistDef = qemuDomainDefCopy(driver, vm->newDef,
+ VIR_DOMAIN_XML_SECURE |
+ VIR_DOMAIN_XML_MIGRATABLE);
}
+ if (!persistDef)
+ goto cleanup;
}
mig = qemuMigrationEatCookie(driver, vm, cookiein, cookieinlen,
QEMU_MIGRATION_COOKIE_STATS;
if (ret == 0 &&
- (qemuMigrationCookieAddPersistent(mig, persistDef) < 0 ||
+ (qemuMigrationCookieAddPersistent(mig, &persistDef) < 0 ||
qemuMigrationBakeCookie(mig, driver, vm, cookieout,
cookieoutlen, cookieFlags) < 0)) {
VIR_WARN("Unable to encode migration cookie");
}
- if (persistDef != vm->newDef)
- virDomainDefFree(persistDef);
+ virDomainDefFree(persistDef);
qemuMigrationCookieFree(mig);
if (events)
qemuMonitorSetDomainLog(priv->mon, NULL, NULL, NULL);
VIR_FREE(priv->origname);
virDomainObjEndAPI(&vm);
- if (mig) {
- virDomainDefFree(qemuMigrationCookieGetPersistent(mig));
- qemuMigrationCookieFree(mig);
- }
+ qemuMigrationCookieFree(mig);
if (orig_err) {
virSetError(orig_err);
virFreeError(orig_err);
return;
qemuMigrationCookieGraphicsFree(mig->graphics);
+ virDomainDefFree(mig->persistent);
qemuMigrationCookieNetworkFree(mig->network);
qemuMigrationCookieNBDFree(mig->nbd);
int
qemuMigrationCookieAddPersistent(qemuMigrationCookiePtr mig,
- virDomainDefPtr def)
+ virDomainDefPtr *def)
{
if (mig->flags & QEMU_MIGRATION_COOKIE_PERSISTENT) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
return -1;
}
- if (!def)
+ if (!def || !*def)
return 0;
- mig->persistent = def;
+ mig->persistent = *def;
+ *def = NULL;
mig->flags |= QEMU_MIGRATION_COOKIE_PERSISTENT;
mig->flagsMandatory |= QEMU_MIGRATION_COOKIE_PERSISTENT;
return 0;