On Tue, Dec 02, 2008 at 10:45:32AM +0100, Daniel Veillard wrote:
On Sun, Nov 30, 2008 at 11:33:06PM +0000, Daniel P. Berrange wrote:
> This patch makes the QEMU driver threadsafe with the exception of the
> domain events code.
> @@ -229,20 +243,22 @@ qemudStartup(void) {
[...]
> +error:
> + if (qemu_driver)
> + qemuDriverUnlock(qemu_driver);
> VIR_FREE(base);
> - VIR_FREE(qemu_driver);
> + qemudShutdown();
okay the clean way to free the driver structure
> @@ -314,16 +334,16 @@ qemudShutdown(void) {
> if (!qemu_driver)
> return -1;
>
> + qemuDriverLock(qemu_driver);
> virCapabilitiesFree(qemu_driver->caps);
>
> /* shutdown active VMs */
> for (i = 0 ; i < qemu_driver->domains.count ; i++) {
> virDomainObjPtr dom = qemu_driver->domains.objs[i];
> + virDomainObjLock(dom);
> if (virDomainIsActive(dom))
> qemudShutdownVMDaemon(NULL, qemu_driver, dom);
> - if (!dom->persistent)
> - virDomainRemoveInactive(&qemu_driver->domains,
> - dom);
> + virDomainObjUnlock(dom);
> }
>
> virDomainObjListFree(&qemu_driver->domains);
> @@ -340,6 +360,7 @@ qemudShutdown(void) {
> if (qemu_driver->brctl)
> brShutdown(qemu_driver->brctl);
>
> + qemuDriverUnlock(qemu_driver);
> VIR_FREE(qemu_driver);
>
> return 0;
We don't remove anymore the non-persistent domain on shutdown ?
Is that because we can hook this to the event lifecycle processing ?
Thq qemudShutdown() method is invoked when the daemon itself is
shutting down completely. There's no need to call the individual
object deletion virDomainRemoveInactive() in this case, because a
few lines later we do a virDomainObjListFree() which bulk removes
all of them.
Regards,
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|