fix timer handling in subprocess
This bug was introduced with the rktio conversion.
This commit is contained in:
parent
a5b28c453a
commit
a7ab538403
|
@ -6578,12 +6578,17 @@ static void kickoff_itimer(intptr_t usec)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void block_timer_signals(int block)
|
static void block_timer_signals(int block)
|
||||||
|
/* Doesn't actually block the signal, because we don't want
|
||||||
|
a new subprocess to start with the signal blocked,
|
||||||
|
but turns off the timer and makes sure that no signal
|
||||||
|
is pending. */
|
||||||
{
|
{
|
||||||
static intptr_t saved_usec;
|
static intptr_t saved_usec;
|
||||||
|
|
||||||
|
if (block) {
|
||||||
struct itimerval t, old;
|
struct itimerval t, old;
|
||||||
sigset_t sigs;
|
sigset_t sigs;
|
||||||
|
|
||||||
if (block) {
|
|
||||||
t.it_value.tv_sec = 0;
|
t.it_value.tv_sec = 0;
|
||||||
t.it_value.tv_usec = 0;
|
t.it_value.tv_usec = 0;
|
||||||
t.it_interval.tv_sec = 0;
|
t.it_interval.tv_sec = 0;
|
||||||
|
@ -6592,16 +6597,9 @@ static void block_timer_signals(int block)
|
||||||
setitimer(ITIMER_PROF, &t, &old);
|
setitimer(ITIMER_PROF, &t, &old);
|
||||||
|
|
||||||
saved_usec = old.it_value.tv_usec;
|
saved_usec = old.it_value.tv_usec;
|
||||||
} else {
|
|
||||||
kickoff_itimer(saved_usec);
|
|
||||||
}
|
|
||||||
|
|
||||||
sigemptyset(&sigs);
|
/* Clear already-queued PROF signal, if any
|
||||||
sigaddset(&sigs, ITIMER_PROF);
|
--- unlikely, but possible */
|
||||||
sigprocmask(block ? SIG_BLOCK : SIG_UNBLOCK, &sigs, NULL);
|
|
||||||
|
|
||||||
if (block) {
|
|
||||||
/* Clear already-queued PROF signal, if any: */
|
|
||||||
sigemptyset(&sigs);
|
sigemptyset(&sigs);
|
||||||
while (!sigpending(&sigs)) {
|
while (!sigpending(&sigs)) {
|
||||||
if (sigismember(&sigs, SIGPROF)) {
|
if (sigismember(&sigs, SIGPROF)) {
|
||||||
|
@ -6612,6 +6610,8 @@ static void block_timer_signals(int block)
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
kickoff_itimer(saved_usec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user