Lines Matching refs:new_thread

56 	struct pthread *curthread, *new_thread;
78 if ((new_thread = _thr_alloc(curthread)) == NULL)
85 new_thread->attr = _pthread_attr_default;
87 new_thread->attr = *(*attr);
88 cpusetp = new_thread->attr.cpuset;
89 cpusetsize = new_thread->attr.cpusetsize;
90 new_thread->attr.cpuset = NULL;
91 new_thread->attr.cpusetsize = 0;
93 if (new_thread->attr.sched_inherit == PTHREAD_INHERIT_SCHED) {
96 new_thread->attr.flags |= PTHREAD_SCOPE_SYSTEM;
98 new_thread->attr.flags &= ~PTHREAD_SCOPE_SYSTEM;
100 new_thread->attr.prio = curthread->attr.prio;
101 new_thread->attr.sched_policy = curthread->attr.sched_policy;
104 new_thread->tid = TID_TERMINATED;
107 if (create_stack(&new_thread->attr) != 0) {
109 _thr_free(curthread, new_thread);
116 new_thread->magic = THR_MAGIC;
117 new_thread->start_routine = start_routine;
118 new_thread->arg = arg;
119 new_thread->cancel_enable = 1;
120 new_thread->cancel_async = 0;
123 TAILQ_INIT(&new_thread->mq[i]);
126 if (new_thread->attr.suspend == THR_CREATE_SUSPENDED) {
127 new_thread->flags = THR_FLAGS_NEED_SUSPEND;
133 new_thread->state = PS_RUNNING;
135 if (new_thread->attr.flags & PTHREAD_CREATE_DETACHED)
136 new_thread->flags |= THR_FLAGS_DETACHED;
139 new_thread->refcount = 1;
140 _thr_link(curthread, new_thread);
147 _thr_stack_fix_protection(new_thread);
150 (*thread) = new_thread;
152 THR_THREAD_LOCK(curthread, new_thread);
157 param.arg = new_thread;
158 param.stack_base = new_thread->attr.stackaddr_attr;
159 param.stack_size = new_thread->attr.stacksize_attr;
160 param.tls_base = (char *)new_thread->tcb;
162 param.child_tid = &new_thread->tid;
163 param.parent_tid = &new_thread->tid;
165 if (new_thread->attr.flags & PTHREAD_SCOPE_SYSTEM)
167 if (new_thread->attr.sched_inherit == PTHREAD_INHERIT_SCHED)
170 sched_param.sched_priority = new_thread->attr.prio;
171 _schedparam_to_rtp(new_thread->attr.sched_policy,
181 new_thread->sigmask = oset;
182 SIGDELSET(new_thread->sigmask, SIGCANCEL);
201 THR_THREAD_LOCK(curthread, new_thread);
202 new_thread->state = PS_DEAD;
203 new_thread->tid = TID_TERMINATED;
204 new_thread->flags |= THR_FLAGS_DETACHED;
205 new_thread->refcount--;
206 if (new_thread->flags & THR_FLAGS_NEED_SUSPEND) {
207 new_thread->cycle++;
208 _thr_umtx_wake(&new_thread->cycle, INT_MAX, 0);
210 _thr_try_gc(curthread, new_thread); /* thread lock released */
215 TID(new_thread), cpusetsize, cpusetp)) {
218 new_thread->force_exit = 1;
219 new_thread->flags |= THR_FLAGS_DETACHED;
220 _thr_try_gc(curthread, new_thread);
226 _thr_report_creation(curthread, new_thread);
227 THR_THREAD_UNLOCK(curthread, new_thread);