On Fri, Jun 17, 2011 at 10:52:03AM +0800, Wen Congyang wrote: > At 06/16/2011 01:06 AM, Daniel P. Berrange Write: > > + > > + > > static int > > qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED, > > virDomainObjPtr vm) > > { > > + qemuDomainObjPrivatePtr priv = vm->privateData; > > I think we should get vm->privateData after we lock vm. Yep, good point. > > > + VIR_DEBUG("vm=%p", vm); > > + > > virDomainObjLock(vm); > > - ((qemuDomainObjPrivatePtr) vm->privateData)->gotShutdown = true; > > + priv->gotShutdown = true; > > + if (priv->fakeReboot) { > > + virDomainObjRef(vm); > > + virThread th; > > + if (virThreadCreate(&th, > > + false, > > + qemuProcessFakeReboot, > > + vm) < 0) { > > + VIR_ERROR("Failed to create reboot thread, killing domain"); > > + qemuProcessKill(vm); > > We should hold an extra reference the vm here. If the vm is not persistent > and we destroy the vm before the thread runs, libvirtd may crash(I think, not test > it). I'm already taking an extra reference just before starting the thread. I need to release that actually in virThreadCreate fails to run. > > > + } > > + } else { > > + qemuProcessKill(vm); > > + } > > virDomainObjUnlock(vm); > > > > return 0; Daiel -- |: 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