diff options
author | jhb <jhb@FreeBSD.org> | 2001-01-13 23:08:34 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-01-13 23:08:34 +0000 |
commit | f0aa56d3bfe5429739c0c8d97acb7aba166e3620 (patch) | |
tree | 70c0b01544cd6c55f54df5ab161f376c4430b705 | |
parent | a15d1515201d7c2bf6ca5d24eee9059f059b6aa7 (diff) | |
download | FreeBSD-src-f0aa56d3bfe5429739c0c8d97acb7aba166e3620.zip FreeBSD-src-f0aa56d3bfe5429739c0c8d97acb7aba166e3620.tar.gz |
- Use sched_lock to prevent the mutex name from changing out from under us
while we are copying it to the kinfo_proc structure.
- Test against p_stat to see if we are blocked on a mutex.
- Terminate ki_mtxname with a null char rather than ki_wmesg.
-rw-r--r-- | sys/kern/kern_proc.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 83ba993..f92ef6c 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -457,11 +457,14 @@ fill_kinfo_proc(p, kp) strncpy(kp->ki_comm, p->p_comm, MAXCOMLEN); kp->ki_comm[MAXCOMLEN] = 0; } - if (p->p_blocked != 0) { + mtx_enter(&sched_lock, MTX_SPIN); + if (p->p_stat == SMTX) { kp->ki_kiflag |= KI_MTXBLOCK; strncpy(kp->ki_mtxname, p->p_mtxname, MTXNAMELEN); - kp->ki_wmesg[MTXNAMELEN] = 0; + kp->ki_mtxname[MTXNAMELEN] = 0; } + kp->ki_stat = p->p_stat; + mtx_exit(&sched_lock, MTX_SPIN); kp->ki_siglist = p->p_siglist; kp->ki_sigmask = p->p_sigmask; kp->ki_xstat = p->p_xstat; @@ -476,7 +479,6 @@ fill_kinfo_proc(p, kp) kp->ki_priority = p->p_priority; kp->ki_usrpri = p->p_usrpri; kp->ki_nativepri = p->p_nativepri; - kp->ki_stat = p->p_stat; kp->ki_nice = p->p_nice; kp->ki_lock = p->p_lock; kp->ki_rqindex = p->p_rqindex; |