
At 06/17/2011 09:26 PM, Daniel P. Berrange Write:
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.
Ah, yes, you have already taken an extrareference. Another question: I reboot and migrate domain like this: # virsh reboot vm1; virsh migrate vm1 --p2p qemu+tls://<dest host>/system When the domain is migrated to the dested, it isnot rebooted, but shut down. I think we should continue reboot after migration.
+ } + } else { + qemuProcessKill(vm); + } virDomainObjUnlock(vm);
return 0;
Daiel