aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2022-03-23 16:36:12 +0000
committerMark Johnston <markj@FreeBSD.org>2022-03-23 16:36:12 +0000
commitb319171861464f6c445905e7649cb43bf9bc78be (patch)
tree15b00f88a90eae22b38490ca51ae6fd7f99bf922
parent0e5c72c3cc5471dfa8cb42b018d623b1ef15dbe8 (diff)
-rw-r--r--sys/kern/kern_exit.c11
-rw-r--r--sys/kern/kern_time.c2
2 files changed, 5 insertions, 8 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index 6d1cd5705f30..7215aed60c83 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -369,15 +369,14 @@ exit1(struct thread *td, int rval, int signo)
* executing, prevent it from rearming itself and let it finish.
*/
if (timevalisset(&p->p_realtimer.it_value) &&
- _callout_stop_safe(&p->p_itcallout, CS_EXECUTING, NULL) == 0) {
+ callout_stop(&p->p_itcallout) == 0) {
timevalclear(&p->p_realtimer.it_interval);
- msleep(&p->p_itcallout, &p->p_mtx, PWAIT, "ritwait", 0);
- KASSERT(!timevalisset(&p->p_realtimer.it_value),
- ("realtime timer is still armed"));
+ PROC_UNLOCK(p);
+ callout_drain(&p->p_itcallout);
+ } else {
+ PROC_UNLOCK(p);
}
- PROC_UNLOCK(p);
-
if (p->p_sysent->sv_onexit != NULL)
p->p_sysent->sv_onexit(p);
seltdfini(td);
diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c
index 194a23fdc9e8..f052c4b6d698 100644
--- a/sys/kern/kern_time.c
+++ b/sys/kern/kern_time.c
@@ -950,8 +950,6 @@ realitexpire(void *arg)
kern_psignal(p, SIGALRM);
if (!timevalisset(&p->p_realtimer.it_interval)) {
timevalclear(&p->p_realtimer.it_value);
- if (p->p_flag & P_WEXIT)
- wakeup(&p->p_itcallout);
return;
}