From e153cba6357213396d75a1ba2ff0f7f9dd794dad Mon Sep 17 00:00:00 2001 From: David Xu Date: Mon, 15 Sep 2003 00:08:48 +0000 Subject: Fix bogus comment and assign sigmask in critical region, use SIG_CANTMASK to remove unmaskable signal masks. --- lib/libpthread/thread/thr_sig.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'lib/libpthread/thread') diff --git a/lib/libpthread/thread/thr_sig.c b/lib/libpthread/thread/thr_sig.c index 1f1f0b4593dc..ad516316f6d0 100644 --- a/lib/libpthread/thread/thr_sig.c +++ b/lib/libpthread/thread/thr_sig.c @@ -347,9 +347,9 @@ _thr_sig_handler(int sig, siginfo_t *info, ucontext_t *ucp) err_save = errno; timeout_save = curthread->timeout; intr_save = curthread->interrupted; - /* Get a fresh copy of signal mask, for thread dump only */ - curthread->sigmask = ucp->uc_sigmask; _kse_critical_enter(); + /* Get a fresh copy of signal mask */ + curthread->sigmask = ucp->uc_sigmask; KSE_LOCK_ACQUIRE(curkse, &_thread_signal_lock); sigfunc = _thread_sigact[sig - 1].sa_sigaction; sa_flags = _thread_sigact[sig - 1].sa_flags & SA_SIGINFO; @@ -394,6 +394,7 @@ _thr_sig_handler(int sig, siginfo_t *info, ucontext_t *ucp) curthread->interrupted = intr_save; _kse_critical_enter(); curthread->sigmask = ucp->uc_sigmask; + SIG_CANTMASK(curthread->sigmask); _kse_critical_leave(&curthread->tcb->tcb_tmbx); DBG_MSG("<<< _thr_sig_handler(%d)\n", sig); } @@ -478,6 +479,7 @@ thr_sig_invoke_handler(struct pthread *curthread, int sig, siginfo_t *info, * Restore the thread's signal mask. */ curthread->sigmask = ucp->uc_sigmask; + SIG_CANTMASK(curthread->sigmask); if (curthread->attr.flags & PTHREAD_SCOPE_SYSTEM) __sys_sigprocmask(SIG_SETMASK, &ucp->uc_sigmask, NULL); KSE_SCHED_LOCK(curkse, curkse->k_kseg); -- cgit v1.3