aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/sys_process.c
diff options
context:
space:
mode:
authorDavid Xu <davidxu@FreeBSD.org>2010-10-09 02:50:23 +0000
committerDavid Xu <davidxu@FreeBSD.org>2010-10-09 02:50:23 +0000
commitcf7d9a8ca86f4febb0a4d0d029474b4ec6b6706b (patch)
tree84ad0652e39fc58da6ca522cc6bf55a188109780 /sys/kern/sys_process.c
parenta362d755769b657dca9f9edb93295992c81506ae (diff)
Notes
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r--sys/kern/sys_process.c17
1 files changed, 3 insertions, 14 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index 525c0e2efa4e..af6b2989691f 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -721,24 +721,13 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data)
return (ESRCH);
}
} else {
- /* this is slow, should be optimized */
- sx_slock(&allproc_lock);
- FOREACH_PROC_IN_SYSTEM(p) {
- PROC_LOCK(p);
- FOREACH_THREAD_IN_PROC(p, td2) {
- if (td2->td_tid == pid)
- break;
- }
- if (td2 != NULL)
- break; /* proc lock held */
- PROC_UNLOCK(p);
- }
- sx_sunlock(&allproc_lock);
- if (p == NULL) {
+ td2 = tdfind(pid, -1);
+ if (td2 == NULL) {
if (proctree_locked)
sx_xunlock(&proctree_lock);
return (ESRCH);
}
+ p = td2->td_proc;
tid = pid;
pid = p->p_pid;
}