Skip to content

Commit

Permalink
options/posix: Fix function prototype of pthread_exit
Browse files Browse the repository at this point in the history
  • Loading branch information
Dennisbonke committed Oct 23, 2023
1 parent e0b134d commit e999a56
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
14 changes: 10 additions & 4 deletions options/posix/generic/pthread-stubs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -354,11 +354,18 @@ namespace {
FutexLock key_mutex_;
}

int pthread_exit(void *ret_val) {
namespace mlibc {
[[noreturn]] void do_exit() {
sys_thread_exit();
__builtin_unreachable();
}
}

[[noreturn]] void pthread_exit(void *ret_val) {
auto self = mlibc::get_current_tcb();

if (__atomic_load_n(&self->cancelBits, __ATOMIC_RELAXED) & tcbExitingBit)
return 0; // We are already exiting
mlibc::do_exit();

__atomic_fetch_or(&self->cancelBits, tcbExitingBit, __ATOMIC_RELAXED);

Expand Down Expand Up @@ -392,8 +399,7 @@ int pthread_exit(void *ret_val) {
// TODO: clean up thread resources when we are detached.

// TODO: do exit(0) when we're the only thread instead
mlibc::sys_thread_exit();
__builtin_unreachable();
mlibc::do_exit();
}

int pthread_join(pthread_t thread, void **ret) {
Expand Down
2 changes: 1 addition & 1 deletion options/posix/include/pthread.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ int pthread_create(pthread_t *__restrict, const pthread_attr_t *__restrict,
void *(*) (void *), void *__restrict);
pthread_t pthread_self(void);
int pthread_equal(pthread_t, pthread_t);
int pthread_exit(void *);
[[noreturn]] void pthread_exit(void *);

int pthread_join(pthread_t, void **);
int pthread_detach(pthread_t);
Expand Down

0 comments on commit e999a56

Please sign in to comment.