summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2002-04-16 17:04:21 +0000
committerjhb <jhb@FreeBSD.org>2002-04-16 17:04:21 +0000
commit2ebbf84d61aded530c93b5bb90300c169cea0fe9 (patch)
treef1f21df8f11372057e81575afbbeb9393c413e60 /sys/kern
parent7202da4491f33663719dc05a4db31422f6937123 (diff)
downloadFreeBSD-src-2ebbf84d61aded530c93b5bb90300c169cea0fe9.zip
FreeBSD-src-2ebbf84d61aded530c93b5bb90300c169cea0fe9.tar.gz
- Lock proctree_lock instead of pgrpsess_lock.
- Exclusively lock proctree_lock while calling leavepgrp().
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_exit.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index db899b2..0d06804 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -231,7 +231,7 @@ exit1(td, rv)
vm->vm_freer = p;
}
- PGRPSESS_XLOCK();
+ sx_xlock(&proctree_lock);
if (SESS_LEADER(p)) {
register struct session *sp;
@@ -251,9 +251,9 @@ exit1(td, rv)
PGRP_UNLOCK(sp->s_ttyp->t_pgrp);
}
/* XXX tp should be locked. */
- PGRPSESS_XUNLOCK();
+ sx_xunlock(&proctree_lock);
(void) ttywait(tp);
- PGRPSESS_XLOCK();
+ sx_xlock(&proctree_lock);
/*
* The tty could have been revoked
* if we blocked.
@@ -263,10 +263,10 @@ exit1(td, rv)
SESS_LOCK(p->p_session);
sp->s_ttyvp = NULL;
SESS_UNLOCK(p->p_session);
- PGRPSESS_XUNLOCK();
+ sx_xunlock(&proctree_lock);
VOP_REVOKE(ttyvp, REVOKEALL);
- PGRPSESS_XLOCK();
vrele(ttyvp);
+ sx_xlock(&proctree_lock);
}
}
if (sp->s_ttyvp) {
@@ -287,7 +287,7 @@ exit1(td, rv)
SESS_UNLOCK(p->p_session);
}
fixjobc(p, p->p_pgrp, 0);
- PGRPSESS_XUNLOCK();
+ sx_xunlock(&proctree_lock);
(void)acct_process(td);
#ifdef KTRACE
/*
@@ -619,13 +619,13 @@ loop:
* Finally finished with old proc entry.
* Unlink it from its process group and free it.
*/
+ sx_xlock(&proctree_lock);
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);
OpenPOWER on IntegriCloud