[libvirt PATCH 01/11] virthreadpool: Use automatic memory management

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Tim Wiederhake <twiederh@xxxxxxxxxx>
---
 src/util/virthreadpool.c | 39 +++++++++++++--------------------------
 1 file changed, 13 insertions(+), 26 deletions(-)

diff --git a/src/util/virthreadpool.c b/src/util/virthreadpool.c
index 426840e435..b6d154802a 100644
--- a/src/util/virthreadpool.c
+++ b/src/util/virthreadpool.c
@@ -306,15 +306,13 @@ void virThreadPoolFree(virThreadPool *pool)
     if (!pool)
         return;
 
-    virMutexLock(&pool->mutex);
-    virThreadPoolDrainLocked(pool);
+    virThreadPoolDrain(pool);
 
     if (pool->identity)
         g_object_unref(pool->identity);
 
     g_free(pool->jobName);
     g_free(pool->workers);
-    virMutexUnlock(&pool->mutex);
     virMutexDestroy(&pool->mutex);
     virCondDestroy(&pool->quit_cond);
     virCondDestroy(&pool->cond);
@@ -326,66 +324,60 @@ void virThreadPoolFree(virThreadPool *pool)
 
 size_t virThreadPoolGetMinWorkers(virThreadPool *pool)
 {
+    VIR_LOCK_GUARD lock = virLockGuardLock(&pool->mutex);
     size_t ret;
 
-    virMutexLock(&pool->mutex);
     ret = pool->minWorkers;
-    virMutexUnlock(&pool->mutex);
 
     return ret;
 }
 
 size_t virThreadPoolGetMaxWorkers(virThreadPool *pool)
 {
+    VIR_LOCK_GUARD lock = virLockGuardLock(&pool->mutex);
     size_t ret;
 
-    virMutexLock(&pool->mutex);
     ret = pool->maxWorkers;
-    virMutexUnlock(&pool->mutex);
 
     return ret;
 }
 
 size_t virThreadPoolGetPriorityWorkers(virThreadPool *pool)
 {
+    VIR_LOCK_GUARD lock = virLockGuardLock(&pool->mutex);
     size_t ret;
 
-    virMutexLock(&pool->mutex);
     ret = pool->nPrioWorkers;
-    virMutexUnlock(&pool->mutex);
 
     return ret;
 }
 
 size_t virThreadPoolGetCurrentWorkers(virThreadPool *pool)
 {
+    VIR_LOCK_GUARD lock = virLockGuardLock(&pool->mutex);
     size_t ret;
 
-    virMutexLock(&pool->mutex);
     ret = pool->nWorkers;
-    virMutexUnlock(&pool->mutex);
 
     return ret;
 }
 
 size_t virThreadPoolGetFreeWorkers(virThreadPool *pool)
 {
+    VIR_LOCK_GUARD lock = virLockGuardLock(&pool->mutex);
     size_t ret;
 
-    virMutexLock(&pool->mutex);
     ret = pool->freeWorkers;
-    virMutexUnlock(&pool->mutex);
 
     return ret;
 }
 
 size_t virThreadPoolGetJobQueueDepth(virThreadPool *pool)
 {
+    VIR_LOCK_GUARD lock = virLockGuardLock(&pool->mutex);
     size_t ret;
 
-    virMutexLock(&pool->mutex);
     ret = pool->jobQueueDepth;
-    virMutexUnlock(&pool->mutex);
 
     return ret;
 }
@@ -398,9 +390,9 @@ int virThreadPoolSendJob(virThreadPool *pool,
                          unsigned int priority,
                          void *jobData)
 {
+    VIR_LOCK_GUARD lock = virLockGuardLock(&pool->mutex);
     virThreadPoolJob *job;
 
-    virMutexLock(&pool->mutex);
     if (pool->quit)
         goto error;
 
@@ -431,11 +423,9 @@ int virThreadPoolSendJob(virThreadPool *pool,
     if (priority)
         virCondSignal(&pool->prioCond);
 
-    virMutexUnlock(&pool->mutex);
     return 0;
 
  error:
-    virMutexUnlock(&pool->mutex);
     return -1;
 }
 
@@ -445,11 +435,10 @@ virThreadPoolSetParameters(virThreadPool *pool,
                            long long int maxWorkers,
                            long long int prioWorkers)
 {
+    VIR_LOCK_GUARD lock = virLockGuardLock(&pool->mutex);
     size_t max;
     size_t min;
 
-    virMutexLock(&pool->mutex);
-
     max = maxWorkers >= 0 ? maxWorkers : pool->maxWorkers;
     min = minWorkers >= 0 ? minWorkers : pool->minWorkers;
     if (min > max) {
@@ -490,26 +479,24 @@ virThreadPoolSetParameters(virThreadPool *pool,
         pool->maxPrioWorkers = prioWorkers;
     }
 
-    virMutexUnlock(&pool->mutex);
     return 0;
 
  error:
-    virMutexUnlock(&pool->mutex);
     return -1;
 }
 
 void
 virThreadPoolStop(virThreadPool *pool)
 {
-    virMutexLock(&pool->mutex);
+    VIR_LOCK_GUARD lock = virLockGuardLock(&pool->mutex);
+
     virThreadPoolStopLocked(pool);
-    virMutexUnlock(&pool->mutex);
 }
 
 void
 virThreadPoolDrain(virThreadPool *pool)
 {
-    virMutexLock(&pool->mutex);
+    VIR_LOCK_GUARD lock = virLockGuardLock(&pool->mutex);
+
     virThreadPoolDrainLocked(pool);
-    virMutexUnlock(&pool->mutex);
 }
-- 
2.31.1




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux