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

@ -25,13 +25,14 @@
int _pthread_reschedule(struct PosixThread *pt) {
int rc, e = errno;
struct sched_param param = {pt->attr.schedparam};
int policy = pt->attr.__schedpolicy;
struct sched_param param = {pt->attr.__schedparam};
if (IsNetbsd()) {
rc = sys_sched_setparam_netbsd(0, pt->tid, pt->attr.schedpolicy, &param);
rc = sys_sched_setparam_netbsd(0, pt->tid, policy, &param);
} else if (IsLinux()) {
rc = sys_sched_setscheduler(pt->tid, pt->attr.schedpolicy, &param);
rc = sys_sched_setscheduler(pt->tid, policy, &param);
} else if (IsFreebsd()) {
rc = _pthread_setschedparam_freebsd(pt->tid, pt->attr.schedpolicy, &param);
rc = _pthread_setschedparam_freebsd(pt->tid, policy, &param);
} else {
rc = enosys();
}