On Fri, May 20, 2011 at 09:36:12AM +0100, Daniel P. Berrange wrote: > On Fri, May 20, 2011 at 03:09:09PM +0800, Wen Congyang wrote: > > If we use p2p migration and the vm is transient, vm will be deleted in > > qemuDomainMigrateConfirm3(). But the caller(doPeer2PeerMigrate() and > > qemuMigrationPerform()) still access it, and it will cause libvirtd crashed. > > > > --- > > src/qemu/qemu_migration.c | 7 ++++++- > > 1 files changed, 6 insertions(+), 1 deletions(-) > > > > diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c > > index 4d7bc38..ab28416 100644 > > --- a/src/qemu/qemu_migration.c > > +++ b/src/qemu/qemu_migration.c > > @@ -1971,6 +1971,11 @@ int qemuMigrationPerform(struct qemud_driver *driver, > > goto cleanup; > > priv->jobActive = QEMU_JOB_MIGRATION_OUT; > > > > + /* Hold an extra reference because we can't allow 'vm' to be deleted in > > + * qemuDomainMigrateConfirm3(). > > + */ > > + virDomainObjRef(vm); > > + > > if (!virDomainObjIsActive(vm)) { > > qemuReportError(VIR_ERR_OPERATION_INVALID, > > "%s", _("domain is not running")); > > @@ -2045,7 +2050,7 @@ endjob: > > vm = NULL; > > > > cleanup: > > - if (vm) > > + if (vm && virDomainObjUnref(vm) > 0) > > virDomainObjUnlock(vm); > > if (event) > > qemuDomainEventQueue(driver, event); > > This is just working around a bug in qemuMigrationConfirm, which > should not have been deleting the 'vm' at all. So I am changing > that latter method to fix the issue Try this patch to fix the problems: http://www.redhat.com/archives/libvir-list/2011-May/msg01335.html Transient VMs can be succesfully migrated normally, or with --p2p, or with the --p2p and --tunnelled flags set. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list