Lines Matching refs:curthread

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