If a proc has P_WEXIT set do not stop it, let it exit since it is already
authorclaudio <claudio@openbsd.org>
Thu, 18 Apr 2024 09:06:42 +0000 (09:06 +0000)
committerclaudio <claudio@openbsd.org>
Thu, 18 Apr 2024 09:06:42 +0000 (09:06 +0000)
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

index 60d7941..2280bc7 100644 (file)
@@ -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);