diff options
| author | David Xu <davidxu@FreeBSD.org> | 2003-09-15 00:08:48 +0000 |
|---|---|---|
| committer | David Xu <davidxu@FreeBSD.org> | 2003-09-15 00:08:48 +0000 |
| commit | e153cba6357213396d75a1ba2ff0f7f9dd794dad (patch) | |
| tree | 4f9ea3fdba9e39e02cb6a7b00261fa3c00f87058 | |
| parent | b9fe6075a0f463c022013c9719dedce94b9463fe (diff) | |
Notes
| -rw-r--r-- | lib/libkse/thread/thr_sig.c | 6 | ||||
| -rw-r--r-- | lib/libpthread/thread/thr_sig.c | 6 |
2 files changed, 8 insertions, 4 deletions
diff --git a/lib/libkse/thread/thr_sig.c b/lib/libkse/thread/thr_sig.c index 1f1f0b4593dc7..ad516316f6d09 100644 --- a/lib/libkse/thread/thr_sig.c +++ b/lib/libkse/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); diff --git a/lib/libpthread/thread/thr_sig.c b/lib/libpthread/thread/thr_sig.c index 1f1f0b4593dc7..ad516316f6d09 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); |
