Lines Matching refs:new_thread

57 	struct pthread *curthread, *new_thread;
79 if ((new_thread = _thr_alloc(curthread)) == NULL)
86 new_thread->attr = _pthread_attr_default;
88 new_thread->attr = *(*attr);
89 cpusetp = new_thread->attr.cpuset;
90 cpusetsize = new_thread->attr.cpusetsize;
91 new_thread->attr.cpuset = NULL;
92 new_thread->attr.cpusetsize = 0;
94 if (new_thread->attr.sched_inherit == PTHREAD_INHERIT_SCHED) {
97 new_thread->attr.flags |= PTHREAD_SCOPE_SYSTEM;
99 new_thread->attr.flags &= ~PTHREAD_SCOPE_SYSTEM;
101 new_thread->attr.prio = curthread->attr.prio;
102 new_thread->attr.sched_policy = curthread->attr.sched_policy;
105 new_thread->tid = TID_TERMINATED;
108 if (create_stack(&new_thread->attr) != 0) {
110 _thr_free(curthread, new_thread);
117 new_thread->magic = THR_MAGIC;
118 new_thread->start_routine = start_routine;
119 new_thread->arg = arg;
120 new_thread->cancel_enable = 1;
121 new_thread->cancel_async = 0;
124 TAILQ_INIT(&new_thread->mq[i]);
127 if (new_thread->attr.suspend == THR_CREATE_SUSPENDED) {
128 new_thread->flags = THR_FLAGS_NEED_SUSPEND;
134 new_thread->state = PS_RUNNING;
136 if (new_thread->attr.flags & PTHREAD_CREATE_DETACHED)
137 new_thread->flags |= THR_FLAGS_DETACHED;
140 new_thread->refcount = 1;
141 _thr_link(curthread, new_thread);
148 _thr_stack_fix_protection(new_thread);
151 (*thread) = new_thread;
153 THR_THREAD_LOCK(curthread, new_thread);
158 param.arg = new_thread;
159 param.stack_base = new_thread->attr.stackaddr_attr;
160 param.stack_size = new_thread->attr.stacksize_attr;
161 param.tls_base = (char *)new_thread->tcb;
163 param.child_tid = &new_thread->tid;
164 param.parent_tid = &new_thread->tid;
166 if (new_thread->attr.flags & PTHREAD_SCOPE_SYSTEM)
168 if (new_thread->attr.sched_inherit == PTHREAD_INHERIT_SCHED)
171 sched_param.sched_priority = new_thread->attr.prio;
172 _schedparam_to_rtp(new_thread->attr.sched_policy,
182 new_thread->sigmask = oset;
183 SIGDELSET(new_thread->sigmask, SIGCANCEL);
202 THR_THREAD_LOCK(curthread, new_thread);
203 new_thread->state = PS_DEAD;
204 new_thread->tid = TID_TERMINATED;
205 new_thread->flags |= THR_FLAGS_DETACHED;
206 new_thread->refcount--;
207 if (new_thread->flags & THR_FLAGS_NEED_SUSPEND) {
208 new_thread->cycle++;
209 _thr_umtx_wake(&new_thread->cycle, INT_MAX, 0);
211 _thr_try_gc(curthread, new_thread); /* thread lock released */
216 TID(new_thread), cpusetsize, cpusetp)) {
219 new_thread->force_exit = 1;
220 new_thread->flags |= THR_FLAGS_DETACHED;
221 _thr_try_gc(curthread, new_thread);
227 _thr_report_creation(curthread, new_thread);
228 THR_THREAD_UNLOCK(curthread, new_thread);