[PATCH 1/2] virMutex: Warn on error

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

 



`pthread_mutex_destroy`, `pthread_mutex_lock` and `pthread_mutex_unlock`
return an error code that is currently ignored.

Add debug information if one of these operations failed, e.g. when there
is an attempt to destroy a still locked mutex or unlock an already
unlocked mutex. Both scenarios are considered undefined behavior.

Signed-off-by: Tim Wiederhake <twiederh@xxxxxxxxxx>
---
 src/util/virthread.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/util/virthread.c b/src/util/virthread.c
index 5422bb74fd..14116a2221 100644
--- a/src/util/virthread.c
+++ b/src/util/virthread.c
@@ -35,7 +35,10 @@
 
 #include "viralloc.h"
 #include "virthreadjob.h"
+#include "virlog.h"
 
+#define VIR_FROM_THIS VIR_FROM_THREAD
+VIR_LOG_INIT("util.thread");
 
 int virOnce(virOnceControl *once, virOnceFunc init)
 {
@@ -83,17 +86,23 @@ int virMutexInitRecursive(virMutex *m)
 
 void virMutexDestroy(virMutex *m)
 {
-    pthread_mutex_destroy(&m->lock);
+    if (pthread_mutex_destroy(&m->lock)) {
+        VIR_WARN("Failed to destroy mutex=%p", m);
+    }
 }
 
 void virMutexLock(virMutex *m)
 {
-    pthread_mutex_lock(&m->lock);
+    if (pthread_mutex_lock(&m->lock)) {
+        VIR_WARN("Failed to lock mutex=%p", m);
+    }
 }
 
 void virMutexUnlock(virMutex *m)
 {
-    pthread_mutex_unlock(&m->lock);
+    if (pthread_mutex_unlock(&m->lock)) {
+        VIR_WARN("Failed to unlock mutex=%p", m);
+    }
 }
 
 virLockGuard virLockGuardLock(virMutex *m)
-- 
2.43.0




[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