if (self->detached == 2)
__syscall(SYS_set_tid_address, 0);
__syscall(SYS_rt_sigprocmask, SIG_BLOCK,
if (self->detached == 2)
__syscall(SYS_set_tid_address, 0);
__syscall(SYS_rt_sigprocmask, SIG_BLOCK,
}
if (self->unblock_cancel)
__syscall(SYS_rt_sigprocmask, SIG_UNBLOCK,
}
if (self->unblock_cancel)
__syscall(SYS_rt_sigprocmask, SIG_UNBLOCK,
- unsigned char *map = 0, *stack = 0, *tsd = 0;
+ unsigned char *map = 0, *stack = 0, *tsd = 0, *stack_limit;
size_t need = libc.tls_size + __pthread_tsd_size;
size = attr._a_stacksize + DEFAULT_STACK_SIZE;
stack = (void *)(attr._a_stackaddr & -16);
size_t need = libc.tls_size + __pthread_tsd_size;
size = attr._a_stacksize + DEFAULT_STACK_SIZE;
stack = (void *)(attr._a_stackaddr & -16);
/* Use application-provided stack for TLS only when
* it does not take more than ~12% or 2k of the
* application's stack space. */
/* Use application-provided stack for TLS only when
* it does not take more than ~12% or 2k of the
* application's stack space. */
if (!tsd) {
if (guard) {
map = mmap(0, size, PROT_NONE, MAP_PRIVATE|MAP_ANON, -1, 0);
if (!tsd) {
if (guard) {
map = mmap(0, size, PROT_NONE, MAP_PRIVATE|MAP_ANON, -1, 0);
}
} else {
map = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);
}
} else {
map = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);
if (attr._a_sched) {
do_sched = new->startlock[0] = 1;
__syscall(SYS_rt_sigprocmask, SIG_BLOCK,
if (attr._a_sched) {
do_sched = new->startlock[0] = 1;
__syscall(SYS_rt_sigprocmask, SIG_BLOCK,