new_thread
new_thread->attr.flags |= PTHREAD_SCOPE_SYSTEM;
new_thread->attr.flags &= ~PTHREAD_SCOPE_SYSTEM;
new_thread->attr.prio = curthread->attr.prio;
new_thread->attr.sched_policy = curthread->attr.sched_policy;
new_thread->tid = TID_TERMINATED;
if (create_stack(&new_thread->attr) != 0) {
_thr_free(curthread, new_thread);
new_thread->magic = THR_MAGIC;
new_thread->start_routine = start_routine;
new_thread->arg = arg;
new_thread->cancel_enable = 1;
new_thread->cancel_async = 0;
TAILQ_INIT(&new_thread->mq[i]);
if (new_thread->attr.suspend == THR_CREATE_SUSPENDED) {
new_thread->flags = THR_FLAGS_NEED_SUSPEND;
new_thread->state = PS_RUNNING;
if (new_thread->attr.flags & PTHREAD_CREATE_DETACHED)
new_thread->flags |= THR_FLAGS_DETACHED;
new_thread->refcount = 1;
_thr_link(curthread, new_thread);
_thr_stack_fix_protection(new_thread);
*thread = new_thread;
THR_THREAD_LOCK(curthread, new_thread);
param.arg = new_thread;
param.stack_base = new_thread->attr.stackaddr_attr;
param.stack_size = new_thread->attr.stacksize_attr;
param.tls_base = (char *)new_thread->tcb;
param.child_tid = &new_thread->tid;
param.parent_tid = &new_thread->tid;
if (new_thread->attr.flags & PTHREAD_SCOPE_SYSTEM)
if (new_thread->attr.sched_inherit == PTHREAD_INHERIT_SCHED)
sched_param.sched_priority = new_thread->attr.prio;
_schedparam_to_rtp(new_thread->attr.sched_policy,
new_thread->sigmask = oset;
SIGDELSET(new_thread->sigmask, SIGCANCEL);
THR_THREAD_LOCK(curthread, new_thread);
new_thread->state = PS_DEAD;
new_thread->tid = TID_TERMINATED;
new_thread->flags |= THR_FLAGS_DETACHED;
new_thread->refcount--;
if (new_thread->flags & THR_FLAGS_NEED_SUSPEND) {
new_thread->cycle++;
_thr_umtx_wake(&new_thread->cycle, INT_MAX, 0);
_thr_try_gc(curthread, new_thread); /* thread lock released */
TID(new_thread), cpusetsize, cpusetp)) {
new_thread->force_exit = 1;
new_thread->flags |= THR_FLAGS_DETACHED;
_thr_try_gc(curthread, new_thread);
_thr_report_creation(curthread, new_thread);
THR_THREAD_UNLOCK(curthread, new_thread);
struct pthread *curthread, *new_thread;
if ((new_thread = _thr_alloc(curthread)) == NULL)
new_thread->attr = _pthread_attr_default;
new_thread->attr = *(*attr);
cpusetp = new_thread->attr.cpuset;
cpusetsize = new_thread->attr.cpusetsize;
new_thread->attr.cpuset = NULL;
new_thread->attr.cpusetsize = 0;
if (new_thread->attr.sched_inherit == PTHREAD_INHERIT_SCHED) {
t = new_thread(p, lwps[i]);
new_thread(np, lwpid);
new_thread(find_proc(info, si.si_pid),