diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index a67d6b42296..54e3044ab09 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -375,6 +375,7 @@ exit1(struct thread *td, int rval, int signo) * Stop the real interval timer. If the handler is currently * executing, prevent it from rearming itself and let it finish. */ + p->p_flag2 &= ~P2_ITSTOPPED; if (timevalisset(&p->p_realtimer.it_value) && callout_stop(&p->p_itcallout) == 0) { timevalclear(&p->p_realtimer.it_interval); diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c index c94ae49b692..d7dc7836629 100644 --- a/sys/kern/kern_time.c +++ b/sys/kern/kern_time.c @@ -884,6 +884,8 @@ realitexpire_reset_callout(struct proc *p, sbintime_t *isbtp) { sbintime_t prec; + if ((p->p_flag & P_WEXIT) != 0) + return; prec = isbtp == NULL ? tvtosbt(p->p_realtimer.it_interval) : *isbtp; callout_reset_sbt(&p->p_itcallout, tvtosbt(p->p_realtimer.it_value), prec >> tc_precexp, realitexpire, p, C_ABSOLUTE);