diff options
| author | David Xu <davidxu@FreeBSD.org> | 2010-10-09 02:50:23 +0000 |
|---|---|---|
| committer | David Xu <davidxu@FreeBSD.org> | 2010-10-09 02:50:23 +0000 |
| commit | cf7d9a8ca86f4febb0a4d0d029474b4ec6b6706b (patch) | |
| tree | 84ad0652e39fc58da6ca522cc6bf55a188109780 /sys/kern/sys_process.c | |
| parent | a362d755769b657dca9f9edb93295992c81506ae (diff) | |
Notes
Diffstat (limited to 'sys/kern/sys_process.c')
| -rw-r--r-- | sys/kern/sys_process.c | 17 |
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; } |
