From d7e8b29a3c7075ef6da13e4cd475a04a1ec490fd Mon Sep 17 00:00:00 2001 From: claudio Date: Thu, 18 Apr 2024 09:06:42 +0000 Subject: [PATCH] If a proc has P_WEXIT set do not stop it, let it exit since it is already mostly dead. This is more like belts and suspenders since a proc in exit1() will not receive signals anymore and so proc_stop() should not be reachable. This is even the case when sigexit() is called and a coredump() is happening. OK mpi@ --- sys/kern/kern_sig.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 60d7941ece2..2280bc7abd7 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sig.c,v 1.324 2024/04/10 10:05:26 claudio Exp $ */ +/* $OpenBSD: kern_sig.c,v 1.325 2024/04/18 09:06:42 claudio Exp $ */ /* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */ /* @@ -1443,6 +1443,9 @@ proc_stop(struct proc *p, int sw) #ifdef MULTIPROCESSOR SCHED_ASSERT_LOCKED(); #endif + /* do not stop exiting procs */ + if (ISSET(p->p_flag, P_WEXIT)) + return; p->p_stat = SSTOP; atomic_clearbits_int(&pr->ps_flags, PS_WAITED); -- 2.20.1