summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exit.c
diff options
context:
space:
mode:
authordwmalone <dwmalone@FreeBSD.org>2002-01-05 21:47:58 +0000
committerdwmalone <dwmalone@FreeBSD.org>2002-01-05 21:47:58 +0000
commitf974b4f783102e55899b7b1ba8354561c699cb2e (patch)
tree3896dee3b59381234bbd48071f6a183865b9fdd1 /sys/kern/kern_exit.c
parent49c162fb20e21d3e903258dc958186dcda58b674 (diff)
downloadFreeBSD-src-f974b4f783102e55899b7b1ba8354561c699cb2e.zip
FreeBSD-src-f974b4f783102e55899b7b1ba8354561c699cb2e.tar.gz
Release text vnode in exit() rather than wait(). Occasionally
fifesystem problems could prevent the release from completing and this could result in init being blocked indefinitely. This was looked over by Matt ages ago. Approved by: dillon
Diffstat (limited to 'sys/kern/kern_exit.c')
-rw-r--r--sys/kern/kern_exit.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index b9e1641..51b77c4 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -123,9 +123,7 @@ exit1(td, rv)
struct proc *p = td->td_proc;
register struct proc *q, *nq;
register struct vmspace *vm;
-#ifdef KTRACE
struct vnode *vtmp;
-#endif
struct exitlist *ep;
GIANT_REQUIRED;
@@ -276,6 +274,14 @@ exit1(td, rv)
}
#endif
/*
+ * Release reference to text vnode
+ */
+ if ((vtmp = p->p_textvp) != NULL) {
+ p->p_textvp = NULL;
+ vrele(vtmp);
+ }
+
+ /*
* Remove proc from allproc queue and pidhash chain.
* Place onto zombproc. Unlink from parent's child list.
*/
@@ -576,12 +582,6 @@ loop:
(void)chgproccnt(p->p_ucred->cr_ruidinfo, -1, 0);
/*
- * Release reference to text vnode
- */
- if (p->p_textvp)
- vrele(p->p_textvp);
-
- /*
* Finally finished with old proc entry.
* Unlink it from its process group and free it.
*/
OpenPOWER on IntegriCloud