At 07/01/2011 06:05 PM, Wen Congyang Write: > If virDomainSaveConfig() failed, we will return NULL to source, > and the vm is still available to restart during confirm() step in > v3 protocol. So we should kill it off in qemuMigrationFinish(). > > In v2 protocol, we should not set vm to NULL, because we hold > a reference of vm and should unrefernce it. > > --- > src/qemu/qemu_migration.c | 21 +++++++++++++++++++-- > 1 files changed, 19 insertions(+), 2 deletions(-) > > diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c > index 800b714..fa98cba 100644 > --- a/src/qemu/qemu_migration.c > +++ b/src/qemu/qemu_migration.c > @@ -2471,7 +2471,7 @@ qemuMigrationFinish(struct qemud_driver *driver, > if (!virDomainObjIsActive(vm)) { > qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s", > _("guest unexpectedly quit")); > - goto cleanup; > + goto endjob; > } > > qemuMigrationVPAssociatePortProfiles(vm->def); > @@ -2491,7 +2491,24 @@ qemuMigrationFinish(struct qemud_driver *driver, > * Return a NULL dom pointer, and hope that this is a rare > * situation and management tools are smart. > */ > - vm = NULL; > + > + /* > + * In v3 protocol, the source VM is still available to > + * restart during confirm() step, so we kill it off > + * now. > + * In v2 protocol, the source is dead, so we leave > + * target in paused state, in case admin can fix > + * things up > + */ > + if (v3proto) { > + qemuProcessStop(driver, vm, 1, VIR_DOMAIN_SHUTOFF_FAILED); > + qemuAuditDomainStop(vm, "failed"); > + if (newVM) { > + if (qemuDomainObjEndJob(vm) > 0) > + virDomainRemoveInactive(&driver->domains, vm); > + vm = NULL; > + } > + } > goto endjob; > } > Ping :) -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list