Restore signal mask correctly after fork().
This commit is contained in:
parent
0527fc8806
commit
9efd29f394
@ -321,10 +321,11 @@ _kse_single_thread(struct pthread *curthread)
|
||||
_kse_initial = NULL;
|
||||
_libpthread_init(curthread);
|
||||
#else
|
||||
if (__isthreaded)
|
||||
_thr_signal_deinit();
|
||||
_ksd_readandclear_tmbx();
|
||||
__isthreaded = 0;
|
||||
active_threads = 0;
|
||||
_thr_signal_deinit();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -984,12 +984,13 @@ _thr_signal_init(void)
|
||||
void
|
||||
_thr_signal_deinit(void)
|
||||
{
|
||||
sigset_t tmpmask, oldmask;
|
||||
struct pthread *curthread = _get_curthread();
|
||||
sigset_t tmpmask;
|
||||
int i;
|
||||
|
||||
SIGFILLSET(tmpmask);
|
||||
SIG_CANTMASK(tmpmask);
|
||||
__sys_sigprocmask(SIG_SETMASK, &tmpmask, &oldmask);
|
||||
__sys_sigprocmask(SIG_SETMASK, &tmpmask, NULL);
|
||||
/* Enter a loop to get the existing signal status: */
|
||||
for (i = 1; i <= _SIG_MAXSIG; i++) {
|
||||
/* Check for signals which cannot be trapped: */
|
||||
@ -1005,6 +1006,6 @@ _thr_signal_deinit(void)
|
||||
PANIC("Cannot set signal handler info");
|
||||
}
|
||||
}
|
||||
__sys_sigprocmask(SIG_SETMASK, &oldmask, NULL);
|
||||
__sys_sigprocmask(SIG_SETMASK, &curthread->sigmask, NULL);
|
||||
}
|
||||
|
||||
|
@ -321,10 +321,11 @@ _kse_single_thread(struct pthread *curthread)
|
||||
_kse_initial = NULL;
|
||||
_libpthread_init(curthread);
|
||||
#else
|
||||
if (__isthreaded)
|
||||
_thr_signal_deinit();
|
||||
_ksd_readandclear_tmbx();
|
||||
__isthreaded = 0;
|
||||
active_threads = 0;
|
||||
_thr_signal_deinit();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -984,12 +984,13 @@ _thr_signal_init(void)
|
||||
void
|
||||
_thr_signal_deinit(void)
|
||||
{
|
||||
sigset_t tmpmask, oldmask;
|
||||
struct pthread *curthread = _get_curthread();
|
||||
sigset_t tmpmask;
|
||||
int i;
|
||||
|
||||
SIGFILLSET(tmpmask);
|
||||
SIG_CANTMASK(tmpmask);
|
||||
__sys_sigprocmask(SIG_SETMASK, &tmpmask, &oldmask);
|
||||
__sys_sigprocmask(SIG_SETMASK, &tmpmask, NULL);
|
||||
/* Enter a loop to get the existing signal status: */
|
||||
for (i = 1; i <= _SIG_MAXSIG; i++) {
|
||||
/* Check for signals which cannot be trapped: */
|
||||
@ -1005,6 +1006,6 @@ _thr_signal_deinit(void)
|
||||
PANIC("Cannot set signal handler info");
|
||||
}
|
||||
}
|
||||
__sys_sigprocmask(SIG_SETMASK, &oldmask, NULL);
|
||||
__sys_sigprocmask(SIG_SETMASK, &curthread->sigmask, NULL);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user