diff options
author | John Baldwin <jhb@FreeBSD.org> | 2001-03-07 03:21:26 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2001-03-07 03:21:26 +0000 |
commit | f553c1794d1b79461e5347ceecbad94e8129e4b0 (patch) | |
tree | 8f1ab1652333050c7da4834d86be550a682f7621 /sys/compat | |
parent | ff655691d8515e59cc1761d61c193c92bd008485 (diff) | |
download | src-f553c1794d1b79461e5347ceecbad94e8129e4b0.tar.gz src-f553c1794d1b79461e5347ceecbad94e8129e4b0.zip |
Just hold the proc lock while getting the parent's PID rather than a
proctree lock.
Notes
Notes:
svn path=/head/; revision=73923
Diffstat (limited to 'sys/compat')
-rw-r--r-- | sys/compat/linprocfs/linprocfs.c | 15 | ||||
-rw-r--r-- | sys/compat/linprocfs/linprocfs_misc.c | 15 |
2 files changed, 10 insertions, 20 deletions
diff --git a/sys/compat/linprocfs/linprocfs.c b/sys/compat/linprocfs/linprocfs.c index 8ba6c41972de..26b1aca45897 100644 --- a/sys/compat/linprocfs/linprocfs.c +++ b/sys/compat/linprocfs/linprocfs.c @@ -363,18 +363,16 @@ linprocfs_doprocstat(curp, p, pfs, uio) struct sbuf sb; char *ps; int r, xlen; - pid_t ppid; - PROCTREE_LOCK(PT_SHARED); - ppid = p->p_pptr ? p->p_pptr->p_pid : 0; - PROCTREE_LOCK(PT_RELEASE); fill_kinfo_proc(p, &kp); sbuf_new(&sb, NULL, 1024, 0); sbuf_printf(&sb, "%d", p->p_pid); #define PS_ADD(name, fmt, arg) sbuf_printf(&sb, " " fmt, arg) PS_ADD("comm", "(%s)", p->p_comm); PS_ADD("statr", "%c", '0'); /* XXX */ - PS_ADD("ppid", "%d", ppid); + PROC_LOCK(p); + PS_ADD("ppid", "%d", p->p_pptr ? p->p_pptr->p_pid : 0); + PROC_UNLOCK(p); PS_ADD("pgrp", "%d", p->p_pgid); PS_ADD("session", "%d", p->p_session->s_sid); PS_ADD("tty", "%d", 0); /* XXX */ @@ -450,7 +448,6 @@ linprocfs_doprocstatus(curp, p, pfs, uio) char *state; int i, r, xlen; segsz_t lsize; - pid_t ppid; sbuf_new(&sb, NULL, 1024, 0); @@ -461,9 +458,6 @@ linprocfs_doprocstatus(curp, p, pfs, uio) state = state_str[(int)p->p_stat]; mtx_unlock_spin(&sched_lock); - PROCTREE_LOCK(PT_SHARED); - ppid = p->p_pptr ? p->p_pptr->p_pid : 0; - PROCTREE_LOCK(PT_RELEASE); fill_kinfo_proc(p, &kp); sbuf_printf(&sb, "Name:\t%s\n", p->p_comm); /* XXX escape */ sbuf_printf(&sb, "State:\t%s\n", state); @@ -472,8 +466,9 @@ linprocfs_doprocstatus(curp, p, pfs, uio) * Credentials */ sbuf_printf(&sb, "Pid:\t%d\n", p->p_pid); - sbuf_printf(&sb, "PPid:\t%d\n", ppid); PROC_LOCK(p); + sbuf_printf(&sb, "PPid:\t%d\n", p->p_pptr ? + p->p_pptr->p_pid : 0); sbuf_printf(&sb, "Uid:\t%d %d %d %d\n", p->p_cred->p_ruid, p->p_ucred->cr_uid, p->p_cred->p_svuid, diff --git a/sys/compat/linprocfs/linprocfs_misc.c b/sys/compat/linprocfs/linprocfs_misc.c index 8ba6c41972de..26b1aca45897 100644 --- a/sys/compat/linprocfs/linprocfs_misc.c +++ b/sys/compat/linprocfs/linprocfs_misc.c @@ -363,18 +363,16 @@ linprocfs_doprocstat(curp, p, pfs, uio) struct sbuf sb; char *ps; int r, xlen; - pid_t ppid; - PROCTREE_LOCK(PT_SHARED); - ppid = p->p_pptr ? p->p_pptr->p_pid : 0; - PROCTREE_LOCK(PT_RELEASE); fill_kinfo_proc(p, &kp); sbuf_new(&sb, NULL, 1024, 0); sbuf_printf(&sb, "%d", p->p_pid); #define PS_ADD(name, fmt, arg) sbuf_printf(&sb, " " fmt, arg) PS_ADD("comm", "(%s)", p->p_comm); PS_ADD("statr", "%c", '0'); /* XXX */ - PS_ADD("ppid", "%d", ppid); + PROC_LOCK(p); + PS_ADD("ppid", "%d", p->p_pptr ? p->p_pptr->p_pid : 0); + PROC_UNLOCK(p); PS_ADD("pgrp", "%d", p->p_pgid); PS_ADD("session", "%d", p->p_session->s_sid); PS_ADD("tty", "%d", 0); /* XXX */ @@ -450,7 +448,6 @@ linprocfs_doprocstatus(curp, p, pfs, uio) char *state; int i, r, xlen; segsz_t lsize; - pid_t ppid; sbuf_new(&sb, NULL, 1024, 0); @@ -461,9 +458,6 @@ linprocfs_doprocstatus(curp, p, pfs, uio) state = state_str[(int)p->p_stat]; mtx_unlock_spin(&sched_lock); - PROCTREE_LOCK(PT_SHARED); - ppid = p->p_pptr ? p->p_pptr->p_pid : 0; - PROCTREE_LOCK(PT_RELEASE); fill_kinfo_proc(p, &kp); sbuf_printf(&sb, "Name:\t%s\n", p->p_comm); /* XXX escape */ sbuf_printf(&sb, "State:\t%s\n", state); @@ -472,8 +466,9 @@ linprocfs_doprocstatus(curp, p, pfs, uio) * Credentials */ sbuf_printf(&sb, "Pid:\t%d\n", p->p_pid); - sbuf_printf(&sb, "PPid:\t%d\n", ppid); PROC_LOCK(p); + sbuf_printf(&sb, "PPid:\t%d\n", p->p_pptr ? + p->p_pptr->p_pid : 0); sbuf_printf(&sb, "Uid:\t%d %d %d %d\n", p->p_cred->p_ruid, p->p_ucred->cr_uid, p->p_cred->p_svuid, |