summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-12-07 14:33:18 +0100
committerAndreas Kling <awesomekling@gmail.com>2019-12-07 14:52:27 +0100
commiteaab7f567216891fa0eb8b1960888b603d5f973b (patch)
treef81dc1a5c9d3013891fd30ba1dd6ef6bdb355862
parentbabb72621221572f6cf2ae3a1171e924b7bb12f1 (diff)
downloadserenity-eaab7f567216891fa0eb8b1960888b603d5f973b.zip
LibPthread: Don't set errno in pthread functions
POSIX says that pthread API's don't set errno directly. If there is an error, it should be the return value from the function instead.
-rw-r--r--Libraries/LibPthread/pthread.cpp11
1 files changed, 4 insertions, 7 deletions
diff --git a/Libraries/LibPthread/pthread.cpp b/Libraries/LibPthread/pthread.cpp
index 8c35406dc1..6e43fe1281 100644
--- a/Libraries/LibPthread/pthread.cpp
+++ b/Libraries/LibPthread/pthread.cpp
@@ -24,8 +24,7 @@ extern "C" {
static int create_thread(void* (*entry)(void*), void* argument, void* stack)
{
- int rc = syscall(SC_create_thread, entry, argument, stack);
- __RETURN_WITH_ERRNO(rc, rc, -1);
+ return syscall(SC_create_thread, entry, argument, stack);
}
static void exit_thread(void* code)
@@ -83,8 +82,7 @@ void pthread_exit(void* value_ptr)
int pthread_join(pthread_t thread, void** exit_value_ptr)
{
- int rc = syscall(SC_join_thread, thread, exit_value_ptr);
- __RETURN_WITH_ERRNO(rc, rc, -1);
+ return syscall(SC_join_thread, thread, exit_value_ptr);
}
int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* attributes)
@@ -413,10 +411,9 @@ int pthread_cond_timedwait(pthread_cond_t* cond, pthread_mutex_t* mutex, const s
while (node.waiting) {
struct timespec now;
if (clock_gettime(condvar.clock, &now) < 0)
- return -1;
+ return errno;
if ((abstime->tv_sec < now.tv_sec) || (abstime->tv_sec == now.tv_sec && abstime->tv_nsec <= now.tv_nsec)) {
- errno = ETIMEDOUT;
- return -1;
+ return ETIMEDOUT;
}
pthread_mutex_unlock(mutex);
sched_yield();