fix (hopefully) all hard-coded 8's for kernel sigset_t size
some minor changes to how hard-coded sets for thread-related purposes are handled were also needed, since the old object sizes were not necessarily sufficient. things have gotten a bit ugly in this area, and i think a cleanup is in order at some point, but for now the goal is just to get the code working on all supported archs including mips, which was badly broken by linux rejecting syscalls with the wrong sigset_t size.
This commit is contained in:
parent
83b42d94bd
commit
2f437040e7
14 changed files with 31 additions and 20 deletions
|
|
@ -38,7 +38,8 @@ void pthread_exit(void *result)
|
|||
if (self->detached && self->map_base) {
|
||||
if (self->detached == 2)
|
||||
__syscall(SYS_set_tid_address, 0);
|
||||
__syscall(SYS_rt_sigprocmask, SIG_BLOCK, (uint64_t[]){-1},0,8);
|
||||
__syscall(SYS_rt_sigprocmask, SIG_BLOCK,
|
||||
SIGALL_SET, 0, __SYSCALL_SSLEN);
|
||||
__unmapself(self->map_base, self->map_size);
|
||||
}
|
||||
|
||||
|
|
@ -61,7 +62,8 @@ static int start(void *p)
|
|||
{
|
||||
pthread_t self = p;
|
||||
if (self->unblock_cancel)
|
||||
__syscall(SYS_rt_sigprocmask, SIG_UNBLOCK, SIGPT_SET, 0, 8);
|
||||
__syscall(SYS_rt_sigprocmask, SIG_UNBLOCK,
|
||||
SIGPT_SET, 0, __SYSCALL_SSLEN);
|
||||
pthread_exit(self->start(self->start_arg));
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue