[libvirt] [PATCH] Fix misc thread locking bugs / bogus warnings
Daniel P. Berrange
berrange at redhat.com
Thu Sep 10 09:35:33 UTC 2009
On Tue, Sep 08, 2009 at 04:33:24PM +0200, Daniel Veillard wrote:
> On Wed, Sep 02, 2009 at 02:11:50PM +0100, Daniel P. Berrange wrote:
> > Fix all thread locking bugs reported by object-locking test
> > case.
> >
> > NB, some of the driver locking is getting too coarse. Driver
> > mutexes really need to be turned into RW locks instead to
> > significantly increase concurrency.
> >
> > * src/lxc_driver.c: Fix useof driver when unlocked in the methods
> > lxcDomainGetInfo, lxcSetSchedulerParameters, and
> > lxcGetSchedulerParameters
> > * src/opennebula/one_driver.c: Fix missing unlock in oneDomainUndefine.
> > Fix use of driver when unlocked in oneDomainGetInfo,
> > oneGetOSType, oneDomainShutdown
> > * src/qemu_driver.c: Fix use of driver when unlocked in
> > qemudDomainSavem, qemuGetSchedulerType, qemuSetSchedulerParameters
> > and qemuGetSchedulerParameters
> > * src/storage_driver.c: Re-work storagePoolCreate to avoid bogus
> > lock checking warning. Re-work storageVolumeCreateXMLFrom to
> > remove a potential NULL de-reference & avoid bogus lock check
> > warnings
> > * src/test.c: Remove testDomainAssignDef since it break lock chekc
> > warnings.
> > * tests/object-locking.ml: Add oneDriverLock, oneDriverUnlock
> > and one_driver_t methods/types to allow lock checking on the
> > OpenNebula drivers
> > diff --git a/src/lxc_driver.c b/src/lxc_driver.c
> > index bd0cf0e..0ec1e92 100644
> > --- a/src/lxc_driver.c
> > +++ b/src/lxc_driver.c
> > @@ -439,7 +439,6 @@ static int lxcDomainGetInfo(virDomainPtr dom,
> >
> > lxcDriverLock(driver);
> > vm = virDomainFindByUUID(&driver->domains, dom->uuid);
> > - lxcDriverUnlock(driver);
> >
> > if (!vm) {
> > lxcError(dom->conn, dom, VIR_ERR_INVALID_DOMAIN,
> > @@ -470,6 +469,7 @@ static int lxcDomainGetInfo(virDomainPtr dom,
> > ret = 0;
> >
> > cleanup:
> > + lxcDriverUnlock(driver);
> > if (cgroup)
> > virCgroupFree(&cgroup);
> > if (vm)
>
> I'm just surprized by this series of fixes, I though we needed to drop
> locks when calling into errors routines like lxcError ?
No, we only need to drop the virConnect mutex - the driver/domain mutexes
can be held without trouble. I really need to write some docs for this
mutex stuff ....
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