diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2020-07-02 10:40:47 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2020-07-02 10:40:47 +0000 |
commit | 4bc5ce2c74d772efe353633f59051e227f524bfa (patch) | |
tree | 461844d1b7d3b176f2be44343b850cba4afeb0e7 /sys/kern | |
parent | 771f100cebd8ada2bd764574386a71b5a5067f45 (diff) | |
download | src-4bc5ce2c74d772efe353633f59051e227f524bfa.tar.gz src-4bc5ce2c74d772efe353633f59051e227f524bfa.zip |
Use tdfind() in pget().
Reviewed by: jhb, hselasky
Sponsored by: Mellanox Technologies
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D25532
Notes
Notes:
svn path=/head/; revision=362885
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_proc.c | 29 |
1 files changed, 4 insertions, 25 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 12570e0b7b13..5dda1b76d539 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -455,30 +455,6 @@ pfind_any(pid_t pid) return (_pfind(pid, true)); } -static struct proc * -pfind_tid(pid_t tid) -{ - struct proc *p; - struct thread *td; - - sx_slock(&allproc_lock); - FOREACH_PROC_IN_SYSTEM(p) { - PROC_LOCK(p); - if (p->p_state == PRS_NEW) { - PROC_UNLOCK(p); - continue; - } - FOREACH_THREAD_IN_PROC(p, td) { - if (td->td_tid == tid) - goto found; - } - PROC_UNLOCK(p); - } -found: - sx_sunlock(&allproc_lock); - return (p); -} - /* * Locate a process group by number. * The caller must hold proctree_lock. @@ -506,6 +482,7 @@ int pget(pid_t pid, int flags, struct proc **pp) { struct proc *p; + struct thread *td1; int error; p = curproc; @@ -519,7 +496,9 @@ pget(pid_t pid, int flags, struct proc **pp) else p = pfind(pid); } else if ((flags & PGET_NOTID) == 0) { - p = pfind_tid(pid); + td1 = tdfind(pid, -1); + if (td1 != NULL) + p = td1->td_proc; } if (p == NULL) return (ESRCH); |