[libvirt PATCH 09/11] storage: Statically initialize mutex

Tim Wiederhake twiederh at redhat.com
Tue Feb 22 14:10:52 UTC 2022


On Thu, 2022-02-17 at 13:15 +0000, Daniel P. Berrangé wrote:
> On Thu, Feb 17, 2022 at 02:01:01PM +0100, Tim Wiederhake wrote:
> 
> Really should be giving an explanation of why this change
> is required.
> 
Added locally to commit message:

  Making the mutex static and independent of the lifetime of the
  driver object allows for simplification of mutex handling during
  the object's initialization and cleanup using VIR_LOCK_GUARD's
  unlock-on-scope-exit behavior.

Regards,
Tim
> > Signed-off-by: Tim Wiederhake <twiederh at redhat.com>
> > ---
> >  src/conf/virstorageobj.h     |  2 --
> >  src/storage/storage_driver.c | 11 ++++-------
> >  2 files changed, 4 insertions(+), 9 deletions(-)
> > 
> > diff --git a/src/conf/virstorageobj.h b/src/conf/virstorageobj.h
> > index 523bdec244..ad6005f153 100644
> > --- a/src/conf/virstorageobj.h
> > +++ b/src/conf/virstorageobj.h
> > @@ -31,8 +31,6 @@ typedef struct _virStoragePoolObjList
> > virStoragePoolObjList;
> >  
> >  typedef struct _virStorageDriverState virStorageDriverState;
> >  struct _virStorageDriverState {
> > -    virMutex lock;
> > -
> >      /* pid file FD, ensures two copies of the driver can't use the
> > same root */
> >      int lockFD;
> >  
> > diff --git a/src/storage/storage_driver.c
> > b/src/storage/storage_driver.c
> > index 97e0d9b3a0..05675a5539 100644
> > --- a/src/storage/storage_driver.c
> > +++ b/src/storage/storage_driver.c
> > @@ -57,6 +57,8 @@ VIR_LOG_INIT("storage.storage_driver");
> >  
> >  static virStorageDriverState *driver;
> >  
> > +static virMutex mutex = VIR_MUTEX_INITIALIZER;
> > +
> >  static int storageStateCleanup(void);
> >  
> >  typedef struct _virStorageVolStreamInfo virStorageVolStreamInfo;
> > @@ -67,11 +69,11 @@ struct _virStorageVolStreamInfo {
> >  
> >  static void storageDriverLock(void)
> >  {
> > -    virMutexLock(&driver->lock);
> > +    virMutexLock(&mutex);
> >  }
> >  static void storageDriverUnlock(void)
> >  {
> > -    virMutexUnlock(&driver->lock);
> > +    virMutexUnlock(&mutex);
> >  }
> >  
> >  
> > @@ -270,10 +272,6 @@ storageStateInitialize(bool privileged,
> >      driver = g_new0(virStorageDriverState, 1);
> >  
> >      driver->lockFD = -1;
> > -    if (virMutexInit(&driver->lock) < 0) {
> > -        VIR_FREE(driver);
> > -        return VIR_DRV_STATE_INIT_ERROR;
> > -    }
> >      storageDriverLock();
> >  
> >      if (!(driver->pools = virStoragePoolObjListNew()))
> > @@ -392,7 +390,6 @@ storageStateCleanup(void)
> >      VIR_FREE(driver->autostartDir);
> >      VIR_FREE(driver->stateDir);
> >      storageDriverUnlock();
> > -    virMutexDestroy(&driver->lock);
> >      VIR_FREE(driver);
> >  
> >      return 0;
> > -- 
> > 2.31.1
> > 
> 
> Regards,
> Daniel





More information about the libvir-list mailing list