Lines Matching defs:curthread

71 static void check_cancel(struct pthread *curthread, ucontext_t *ucp);
94 thr_signal_block_slow(struct pthread *curthread)
96 if (curthread->sigblock > 0) {
97 curthread->sigblock++;
100 __sys_sigprocmask(SIG_BLOCK, &_thr_maskset, &curthread->sigmask);
101 curthread->sigblock++;
105 thr_signal_unblock_slow(struct pthread *curthread)
107 if (--curthread->sigblock == 0)
108 __sys_sigprocmask(SIG_SETMASK, &curthread->sigmask, NULL);
112 thr_signal_block_fast(struct pthread *curthread)
114 atomic_add_32(&curthread->fsigblock, SIGFASTBLOCK_INC);
118 thr_signal_unblock_fast(struct pthread *curthread)
122 oldval = atomic_fetchadd_32(&curthread->fsigblock, -SIGFASTBLOCK_INC);
130 _thr_signal_block(struct pthread *curthread)
133 thr_signal_block_fast(curthread);
135 thr_signal_block_slow(curthread);
139 _thr_signal_unblock(struct pthread *curthread)
142 thr_signal_unblock_fast(curthread);
144 thr_signal_unblock_slow(curthread);
159 _thr_signal_block_setup(struct pthread *curthread)
163 __sys_sigfastblock(SIGFASTBLOCK_SETPTR, &curthread->fsigblock);
190 struct pthread *curthread = _get_curthread();
193 if (THR_IN_CRITICAL(curthread))
196 check_suspend(curthread);
197 check_cancel(curthread, ucp);
210 struct pthread *curthread;
217 curthread = _get_curthread();
224 curthread->deferred_run = 0;
233 if (THR_IN_CRITICAL(curthread) && SIGISMEMBER(_thr_deferset, sig)) {
234 memcpy(&curthread->deferred_sigact, &act, sizeof(struct sigaction));
235 memcpy(&curthread->deferred_siginfo, info, sizeof(siginfo_t));
236 curthread->deferred_sigmask = ucp->uc_sigmask;
248 struct pthread *curthread = _get_curthread();
263 in_sigsuspend = curthread->in_sigsuspend;
264 curthread->in_sigsuspend = 0;
275 cancel_point = curthread->cancel_point;
276 cancel_async = curthread->cancel_async;
277 cancel_enable = curthread->cancel_enable;
278 curthread->cancel_point = 0;
280 curthread->cancel_enable = 0;
304 curthread->in_sigsuspend = in_sigsuspend;
305 curthread->cancel_point = cancel_point;
306 curthread->cancel_enable = cancel_enable;
311 check_cancel(curthread, ucp);
316 _thr_ast(struct pthread *curthread)
319 if (!THR_IN_CRITICAL(curthread)) {
320 check_deferred_signal(curthread);
321 check_suspend(curthread);
322 check_cancel(curthread, NULL);
328 check_cancel(struct pthread *curthread, ucontext_t *ucp)
331 if (__predict_true(!curthread->cancel_pending ||
332 !curthread->cancel_enable || curthread->no_cancel))
355 if (curthread->cancel_point) {
356 if (curthread->in_sigsuspend) {
359 curthread->unblock_sigcancel = 1;
361 _thr_send_sig(curthread, SIGCANCEL);
363 thr_wake(curthread->tid);
364 } else if (curthread->cancel_async) {
375 check_deferred_signal(struct pthread *curthread)
382 if (__predict_true(curthread->deferred_siginfo.si_signo == 0 ||
383 curthread->deferred_run))
386 curthread->deferred_run = 1;
390 if (curthread->deferred_siginfo.si_signo == 0) {
391 curthread->deferred_run = 0;
395 act = curthread->deferred_sigact;
396 uc->uc_sigmask = curthread->deferred_sigmask;
397 memcpy(&info, &curthread->deferred_siginfo, sizeof(siginfo_t));
399 curthread->deferred_siginfo.si_signo = 0;
405 check_suspend(struct pthread *curthread)
409 if (__predict_true((curthread->flags & (THR_FLAGS_NEED_SUSPEND |
412 if (curthread == _single_thread)
414 if (curthread->force_exit)
420 _thr_signal_block(curthread);
427 curthread->critical_count++;
428 THR_UMUTEX_LOCK(curthread, &(curthread)->lock);
429 while ((curthread->flags & THR_FLAGS_NEED_SUSPEND) != 0) {
430 curthread->cycle++;
431 cycle = curthread->cycle;
434 _thr_umtx_wake(&curthread->cycle, INT_MAX, 0);
440 if (curthread->state == PS_DEAD)
442 curthread->flags |= THR_FLAGS_SUSPENDED;
443 THR_UMUTEX_UNLOCK(curthread, &(curthread)->lock);
444 _thr_umtx_wait_uint(&curthread->cycle, cycle, NULL, 0);
445 THR_UMUTEX_LOCK(curthread, &(curthread)->lock);
447 THR_UMUTEX_UNLOCK(curthread, &(curthread)->lock);
448 curthread->critical_count--;
450 _thr_signal_unblock(curthread);
499 struct pthread *curthread = _get_curthread();
507 _thr_signal_block(curthread);
531 _thr_signal_unblock(curthread);
677 struct pthread *curthread;
681 curthread = _get_curthread();
683 old = curthread->in_sigsuspend;
684 curthread->in_sigsuspend = 1;
685 _thr_cancel_enter(curthread);
687 _thr_cancel_leave(curthread, 1);
688 curthread->in_sigsuspend = old;
689 if (curthread->unblock_sigcancel) {
690 curthread->unblock_sigcancel = 0;
718 struct pthread *curthread = _get_curthread();
722 _thr_cancel_enter(curthread);
725 _thr_cancel_leave(curthread, (ret == -1));
745 struct pthread *curthread = _get_curthread();
749 _thr_cancel_enter(curthread);
751 _thr_cancel_leave(curthread, ret == -1);
771 struct pthread *curthread = _get_curthread();
776 _thr_cancel_enter(curthread);
778 _thr_cancel_leave(curthread, (ret != 0));