diff options
author | mjg <mjg@FreeBSD.org> | 2016-01-20 23:22:36 +0000 |
---|---|---|
committer | mjg <mjg@FreeBSD.org> | 2016-01-20 23:22:36 +0000 |
commit | 1a52d1b25e27972a26ec2fa156565d67a997e2db (patch) | |
tree | a335cec317942df061929eabcef264b40fc5c831 | |
parent | dfe3d695334e1300d01e5e4db90e19733c4ac470 (diff) | |
download | FreeBSD-src-1a52d1b25e27972a26ec2fa156565d67a997e2db.zip FreeBSD-src-1a52d1b25e27972a26ec2fa156565d67a997e2db.tar.gz |
session: tidy up fixjobc
This stops abusing the 'p' pointer for iteration over children processes
and gets rid of useless locking around PRS_ZOMBIE check.
Suggested by: kib
-rw-r--r-- | sys/kern/kern_proc.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index bbedd9b..6937fb4 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -650,13 +650,11 @@ pgadjustjobc(pgrp, entering) * entering == 1 => p is entering specified group. */ void -fixjobc(p, pgrp, entering) - register struct proc *p; - register struct pgrp *pgrp; - int entering; +fixjobc(struct proc *p, struct pgrp *pgrp, int entering) { - register struct pgrp *hispgrp; - register struct session *mysession; + struct pgrp *hispgrp; + struct session *mysession; + struct proc *q; sx_assert(&proctree_lock, SX_LOCKED); PROC_LOCK_ASSERT(p, MA_NOTOWNED); @@ -677,17 +675,13 @@ fixjobc(p, pgrp, entering) * their process groups; if so, adjust counts for children's * process groups. */ - LIST_FOREACH(p, &p->p_children, p_sibling) { - hispgrp = p->p_pgrp; + LIST_FOREACH(q, &p->p_children, p_sibling) { + hispgrp = q->p_pgrp; if (hispgrp == pgrp || hispgrp->pg_session != mysession) continue; - PROC_LOCK(p); - if (p->p_state == PRS_ZOMBIE) { - PROC_UNLOCK(p); + if (q->p_state == PRS_ZOMBIE) continue; - } - PROC_UNLOCK(p); pgadjustjobc(hispgrp, entering); } } |