Signed-off-by: Rafael Fonseca <r4f4rfs@xxxxxxxxx> --- src/conf/virchrdev.c | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/src/conf/virchrdev.c b/src/conf/virchrdev.c index 800e82869e..8280f8e188 100644 --- a/src/conf/virchrdev.c +++ b/src/conf/virchrdev.c @@ -44,7 +44,7 @@ VIR_LOG_INIT("conf.chrdev"); /* structure holding information about character devices * open in a given domain */ struct _virChrdevs { - virMutex lock; + GMutex lock; virHashTablePtr hash; }; @@ -238,12 +238,10 @@ static void virChrdevFDStreamCloseCb(virStreamPtr st G_GNUC_UNUSED, void *opaque) { virChrdevStreamInfoPtr priv = opaque; - virMutexLock(&priv->devs->lock); + g_autoptr(GMutexLocker) locker = g_mutex_locker_new(&priv->devs->lock); /* remove entry from hash */ virHashRemoveEntry(priv->devs->hash, priv->path); - - virMutexUnlock(&priv->devs->lock); } /** @@ -258,12 +256,7 @@ virChrdevsPtr virChrdevAlloc(void) if (VIR_ALLOC(devs) < 0) return NULL; - if (virMutexInit(&devs->lock) < 0) { - virReportSystemError(errno, "%s", - _("Unable to init device stream mutex")); - VIR_FREE(devs); - return NULL; - } + g_mutex_init(&devs->lock); /* there will hardly be any devices most of the time, the hash * does not have to be huge */ @@ -299,11 +292,11 @@ void virChrdevFree(virChrdevsPtr devs) if (!devs) return; - virMutexLock(&devs->lock); + g_mutex_lock(&devs->lock); virHashForEach(devs->hash, virChrdevFreeClearCallbacks, NULL); virHashFree(devs->hash); - virMutexUnlock(&devs->lock); - virMutexDestroy(&devs->lock); + g_mutex_unlock(&devs->lock); + g_mutex_clear(&devs->lock); VIR_FREE(devs); } @@ -334,6 +327,7 @@ int virChrdevOpen(virChrdevsPtr devs, char *path; int ret; bool added = false; + g_autoptr(GMutexLocker) locker = g_mutex_locker_new(&devs->lock); switch (source->type) { case VIR_DOMAIN_CHR_TYPE_PTY: @@ -354,12 +348,9 @@ int virChrdevOpen(virChrdevsPtr devs, return -1; } - virMutexLock(&devs->lock); - if ((ent = virHashLookup(devs->hash, path))) { if (!force) { /* entry found, device is busy */ - virMutexUnlock(&devs->lock); return 1; } else { /* terminate existing connection */ @@ -378,13 +369,11 @@ int virChrdevOpen(virChrdevsPtr devs, /* create the lock file */ if ((ret = virChrdevLockFileCreate(path)) < 0) { - virMutexUnlock(&devs->lock); return ret; } /* obtain a reference to the stream */ if (virStreamRef(st) < 0) { - virMutexUnlock(&devs->lock); return -1; } @@ -428,7 +417,6 @@ int virChrdevOpen(virChrdevsPtr devs, cbdata, virChrdevFDStreamCloseCbFree); - virMutexUnlock(&devs->lock); return 0; error: @@ -440,7 +428,6 @@ int virChrdevOpen(virChrdevsPtr devs, if (cbdata) VIR_FREE(cbdata->path); VIR_FREE(cbdata); - virMutexUnlock(&devs->lock); virChrdevHashEntryFree(ent); return -1; } -- 2.25.2