[libvirt] PATCH: 7/28: Thread safety for QEMU driver
Daniel P. Berrange
berrange at redhat.com
Tue Dec 2 10:45:19 UTC 2008
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 :|
More information about the libvir-list
mailing list