summaryrefslogtreecommitdiff
path: root/Libraries/LibPthread
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 /Libraries/LibPthread
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.
Diffstat (limited to 'Libraries/LibPthread')
-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();