Lines Matching defs:new_thread
56 struct pthread *curthread, *new_thread;
77 if ((new_thread = _thr_alloc(curthread)) == NULL)
84 new_thread->attr = _pthread_attr_default;
86 new_thread->attr = *(*attr);
87 cpusetp = new_thread->attr.cpuset;
88 cpusetsize = new_thread->attr.cpusetsize;
89 new_thread->attr.cpuset = NULL;
90 new_thread->attr.cpusetsize = 0;
92 if (new_thread->attr.sched_inherit == PTHREAD_INHERIT_SCHED) {
95 new_thread->attr.flags |= PTHREAD_SCOPE_SYSTEM;
97 new_thread->attr.flags &= ~PTHREAD_SCOPE_SYSTEM;
99 new_thread->attr.prio = curthread->attr.prio;
100 new_thread->attr.sched_policy = curthread->attr.sched_policy;
103 new_thread->tid = TID_TERMINATED;
106 if (create_stack(&new_thread->attr) != 0) {
108 _thr_free(curthread, new_thread);
115 new_thread->magic = THR_MAGIC;
116 new_thread->start_routine = start_routine;
117 new_thread->arg = arg;
118 new_thread->cancel_enable = 1;
119 new_thread->cancel_async = 0;
122 TAILQ_INIT(&new_thread->mq[i]);
125 if (new_thread->attr.suspend == THR_CREATE_SUSPENDED) {
126 new_thread->flags = THR_FLAGS_NEED_SUSPEND;
132 new_thread->state = PS_RUNNING;
134 if (new_thread->attr.flags & PTHREAD_CREATE_DETACHED)
135 new_thread->flags |= THR_FLAGS_DETACHED;
138 new_thread->refcount = 1;
139 _thr_link(curthread, new_thread);
146 _thr_stack_fix_protection(new_thread);
149 *thread = new_thread;
151 THR_THREAD_LOCK(curthread, new_thread);
156 param.arg = new_thread;
157 param.stack_base = new_thread->attr.stackaddr_attr;
158 param.stack_size = new_thread->attr.stacksize_attr;
159 param.tls_base = (char *)new_thread->tcb;
161 param.child_tid = &new_thread->tid;
162 param.parent_tid = &new_thread->tid;
164 if (new_thread->attr.flags & PTHREAD_SCOPE_SYSTEM)
166 if (new_thread->attr.sched_inherit == PTHREAD_INHERIT_SCHED)
169 sched_param.sched_priority = new_thread->attr.prio;
170 _schedparam_to_rtp(new_thread->attr.sched_policy,
180 new_thread->sigmask = oset;
181 SIGDELSET(new_thread->sigmask, SIGCANCEL);
200 THR_THREAD_LOCK(curthread, new_thread);
201 new_thread->state = PS_DEAD;
202 new_thread->tid = TID_TERMINATED;
203 new_thread->flags |= THR_FLAGS_DETACHED;
204 new_thread->refcount--;
205 if (new_thread->flags & THR_FLAGS_NEED_SUSPEND) {
206 new_thread->cycle++;
207 _thr_umtx_wake(&new_thread->cycle, INT_MAX, 0);
209 _thr_try_gc(curthread, new_thread); /* thread lock released */
214 TID(new_thread), cpusetsize, cpusetp)) {
217 new_thread->force_exit = 1;
218 new_thread->flags |= THR_FLAGS_DETACHED;
219 _thr_try_gc(curthread, new_thread);
225 _thr_report_creation(curthread, new_thread);
226 THR_THREAD_UNLOCK(curthread, new_thread);