From ebdc3f1d2dd4c2488f54f141fa29bd7a424d8261 Mon Sep 17 00:00:00 2001 From: Seigo Tanimura Date: Wed, 25 Apr 2001 10:22:35 +0000 Subject: [PATCH] Do not leave a process with no credential in zombproc. Reviewed by: jhb --- sys/kern/kern_exit.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index 209210d3ffc..ece138d3a64 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -522,6 +522,20 @@ loop: if (p->p_textvp) vrele(p->p_textvp); + /* + * Finally finished with old proc entry. + * Unlink it from its process group and free it. + */ + leavepgrp(p); + + sx_xlock(&allproc_lock); + LIST_REMOVE(p, p_list); /* off zombproc */ + sx_xunlock(&allproc_lock); + + sx_xlock(&proctree_lock); + LIST_REMOVE(p, p_sibling); + sx_xunlock(&proctree_lock); + /* * Free up credentials. */ @@ -538,30 +552,13 @@ loop: */ if (p->p_args && --p->p_args->ar_ref == 0) FREE(p->p_args, M_PARGS); - PROC_UNLOCK(p); - /* - * Finally finished with old proc entry. - * Unlink it from its process group and free it. - */ - leavepgrp(p); - - sx_xlock(&allproc_lock); - LIST_REMOVE(p, p_list); /* off zombproc */ - sx_xunlock(&allproc_lock); - - sx_xlock(&proctree_lock); - LIST_REMOVE(p, p_sibling); - sx_xunlock(&proctree_lock); - - PROC_LOCK(p); if (--p->p_procsig->ps_refcnt == 0) { if (p->p_sigacts != &p->p_addr->u_sigacts) FREE(p->p_sigacts, M_SUBPROC); FREE(p->p_procsig, M_SUBPROC); p->p_procsig = NULL; } - PROC_UNLOCK(p); /* * Give machine-dependent layer a chance