[libvirt] [PATCH 10/11] qemu: switch QEMU capabilities to use virFileCache

Pavel Hrdina phrdina at redhat.com
Wed Jul 19 11:49:28 UTC 2017


On Wed, Jul 19, 2017 at 12:19:17PM +0200, Jiri Denemark wrote:
> On Mon, Jul 10, 2017 at 14:46:49 +0200, Pavel Hrdina wrote:
> > The switch contains considerable amount of changes:
> > 
> >   virQEMUCapsRememberCached() is removed because this is now handled
> >   by virFileCacheSave().
> > 
> >   virQEMUCapsInitCached() is removed because this is now handled by
> >   virFileCacheLoad().
> > 
> >   virQEMUCapsNewForBinary() is split into two functions,
> >   virQEMUCapsNewData() which creates new data if there is nothing
> >   cached and virQEMUCapsLoadFile() which loads the cached data.
> >   This is now handled by virFileCacheNewData().
> > 
> >   virQEMUCapsCacheValidate() is removed because this is now handled by
> >   virFileCacheValidate().
> > 
> >   virQEMUCapsCacheFree() is removed because it's no longer required.
> > 
> >   Add virCapsPtr into virQEMUCapsCachePriv because for each call of
> >   virFileCacheLookup*() we need to use current virCapsPtr.
> > 
> > Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> > ---
> >  src/qemu/qemu_capabilities.c | 322 ++++++++++++-------------------------------
> >  src/qemu/qemu_capabilities.h |  17 +--
> >  src/qemu/qemu_capspriv.h     |   8 +-
> >  src/qemu/qemu_conf.h         |   3 +-
> >  src/qemu/qemu_driver.c       |   2 +-
> >  tests/testutilsqemu.c        |   9 +-
> >  tests/testutilsqemu.h        |   3 +-
> >  7 files changed, 102 insertions(+), 262 deletions(-)
> > 
> > diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> > index e190cfa8b1..c3e09616de 100644
> > --- a/src/qemu/qemu_capabilities.c
> > +++ b/src/qemu/qemu_capabilities.c
> ...
> >  virQEMUCapsPtr
> >  virQEMUCapsCacheLookup(virCapsPtr caps,
> > -                       virQEMUCapsCachePtr cache,
> > +                       virFileCachePtr cache,
> >                         const char *binary)
> >  {
> >      virQEMUCapsPtr ret = NULL;
> > +    virQEMUCapsCachePrivPtr priv = virFileCacheGetPriv(cache);
> >  
> > -    virMutexLock(&cache->lock);
> > -
> > -    ret = virHashLookup(cache->binaries, binary);
> > -    virQEMUCapsCacheValidate(cache, binary, caps, &ret);
> > -    virObjectRef(ret);
> > -
> > -    virMutexUnlock(&cache->lock);
> > +    priv->caps = caps;
> > +    ret = virFileCacheLookup(cache, binary);
> > +    priv->caps = NULL;
> 
> This is not safe anymore since the cache is locked only inside
> virFileCacheLookup. I think you will need to use a new parameter for
> passing the capabilities to virFileCacheLookup.

Right, I thought that this might be an issue, I'll fix both cases.

Thanks,

Pavel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170719/51d2ed0c/attachment-0001.sig>


More information about the libvir-list mailing list