Lines Matching defs:pthread
34 #include <pthread.h>
41 _pthread_join(pthread_t pthread, void **thread_return)
43 struct pthread *curthread = _get_curthread();
51 if (pthread == NULL || pthread->magic != THR_MAGIC) {
58 if (pthread == curthread) {
68 if ((ret = _thr_ref_add(curthread, pthread, /*include dead*/1)) != 0) {
74 THR_SCHED_LOCK(curthread, pthread);
76 if ((pthread->attr.flags & PTHREAD_DETACHED) != 0) {
77 THR_SCHED_UNLOCK(curthread, pthread);
79 _thr_ref_delete(curthread, pthread);
83 if (pthread->state == PS_DEAD) {
85 tmp = pthread->ret;
88 pthread->attr.flags |= PTHREAD_DETACHED;
91 THR_SCHED_UNLOCK(curthread, pthread);
99 THR_LIST_REMOVE(pthread);
100 THR_GCLIST_ADD(pthread);
105 _thr_ref_delete(curthread, pthread);
109 else if (pthread->joiner != NULL) {
111 THR_SCHED_UNLOCK(curthread, pthread);
112 _thr_ref_delete(curthread, pthread);
119 pthread->joiner = curthread;
122 curthread->join_status.thread = pthread;
125 THR_SCHED_UNLOCK(curthread, pthread);
126 _thr_ref_delete(curthread, pthread);
129 while (curthread->join_status.thread == pthread) {
140 if (_thr_ref_add(curthread, pthread, 1) == 0) {
141 THR_SCHED_LOCK(curthread, pthread);
142 pthread->joiner = NULL;
143 THR_SCHED_UNLOCK(curthread, pthread);
144 _thr_ref_delete(curthread, pthread);