]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix errno handling for pthreads wrappers
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 28 Oct 2009 19:54:07 +0000 (19:54 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 10 Nov 2009 11:59:11 +0000 (11:59 +0000)
* 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

index 4e00bc5806ff85438d7a5b691eeb81e8fbc06c6f..b3ec06ea2ec9e3b8d9f724f3d4b88a50bd9b1371 100644 (file)
@@ -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;