summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_process.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r--sys/kern/sys_process.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index 9c6c204..10209ec 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -635,7 +635,7 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data)
struct iovec iov;
struct uio uio;
struct proc *curp, *p, *pp;
- struct thread *td2 = NULL;
+ struct thread *td2 = NULL, *td3;
struct ptrace_io_desc *piod = NULL;
struct ptrace_lwpinfo *pl;
int error, write, tmp, num;
@@ -953,10 +953,8 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data)
td2->td_xsig = data;
if (req == PT_DETACH) {
- struct thread *td3;
- FOREACH_THREAD_IN_PROC(p, td3) {
+ FOREACH_THREAD_IN_PROC(p, td3)
td3->td_dbgflags &= ~TDB_SUSPEND;
- }
}
/*
* unsuspend all threads, to not let a thread run,
@@ -967,6 +965,8 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data)
p->p_flag &= ~(P_STOPPED_TRACE|P_STOPPED_SIG|P_WAITED);
thread_unsuspend(p);
PROC_SUNLOCK(p);
+ if (req == PT_ATTACH)
+ kern_psignal(p, data);
} else {
if (data)
kern_psignal(p, data);
OpenPOWER on IntegriCloud