[libvirt] [PATCH 02/15] Fix errno handling for pthreads wrappers

Daniel P. Berrange berrange at redhat.com
Tue Nov 3 19:49:56 UTC 2009


* src/util/threads-pthread.c: pthreads APIs do not set errno, instead
  the return value is the positive errno. Set errno based on the return
  value in the wrappers
---
 src/util/threads-pthread.c |   26 +++++++++++++++-----------
 1 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/util/threads-pthread.c b/src/util/threads-pthread.c
index 4e00bc5..b3ec06e 100644
--- a/src/util/threads-pthread.c
+++ b/src/util/threads-pthread.c
@@ -35,8 +35,9 @@ void virThreadOnExit(void)
 
 int virMutexInit(virMutexPtr m)
 {
-    if (pthread_mutex_init(&m->lock, NULL) != 0) {
-        errno = EINVAL;
+    int ret;
+    if ((ret = pthread_mutex_init(&m->lock, NULL)) != 0) {
+        errno = ret;
         return -1;
     }
     return 0;
@@ -57,11 +58,11 @@ void virMutexUnlock(virMutexPtr m)
 }
 
 
-
 int virCondInit(virCondPtr c)
 {
-    if (pthread_cond_init(&c->cond, NULL) != 0) {
-        errno = EINVAL;
+    int ret;
+    if ((ret = pthread_cond_init(&c->cond, NULL)) != 0) {
+        errno = ret;
         return -1;
     }
     return 0;
@@ -69,8 +70,9 @@ int virCondInit(virCondPtr c)
 
 int virCondDestroy(virCondPtr c)
 {
-    if (pthread_cond_destroy(&c->cond) != 0) {
-        errno = EINVAL;
+    int ret;
+    if ((ret = pthread_cond_destroy(&c->cond)) != 0) {
+        errno = ret;
         return -1;
     }
     return 0;
@@ -78,8 +80,9 @@ int virCondDestroy(virCondPtr c)
 
 int virCondWait(virCondPtr c, virMutexPtr m)
 {
-    if (pthread_cond_wait(&c->cond, &m->lock) != 0) {
-        errno = EINVAL;
+    int ret;
+    if ((ret = pthread_cond_wait(&c->cond, &m->lock)) != 0) {
+        errno = ret;
         return -1;
     }
     return 0;
@@ -99,8 +102,9 @@ void virCondBroadcast(virCondPtr c)
 int virThreadLocalInit(virThreadLocalPtr l,
                        virThreadLocalCleanup c)
 {
-    if (pthread_key_create(&l->key, c) != 0) {
-        errno = EINVAL;
+    int ret;
+    if ((ret = pthread_key_create(&l->key, c)) != 0) {
+        errno = ret;
         return -1;
     }
     return 0;
-- 
1.6.2.5




More information about the libvir-list mailing list