Make more improvements to threading support

- fix rare thread exit race condition on openbsd
- pthread_getattr_np() now supplies detached status
- child threads may now pthread_join() the main thread
- introduce sigandset(), sigorset(), and sigisemptyset()
- introduce pthread_cleanup_push() and pthread_cleanup_pop()
This commit is contained in:
Justine Tunney 2022-10-08 23:54:05 -07:00
parent 38df0a4186
commit 4a6fd3d910
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
52 changed files with 586 additions and 241 deletions

View file

@ -24,14 +24,16 @@
/**
* Waits for thread to terminate.
*
* @param value_ptr if non-null will receive pthread_exit() argument
* @return 0 on success, or errno with error
* @raise EDEADLK if thread is detached
* @raise EDEADLK if `thread` is the current thread
* @raise EINVAL if `thread` is detached
* @returnserrno
* @threadsafe
*/
int pthread_join(pthread_t thread, void **value_ptr) {
struct PosixThread *pt;
if (thread == pthread_self()) {
if (thread == __get_tls()->tib_pthread) {
return EDEADLK;
}
if (!(pt = (struct PosixThread *)thread) || //