* 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