diff options
author | davidxu <davidxu@FreeBSD.org> | 2005-12-24 02:59:29 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2005-12-24 02:59:29 +0000 |
commit | 4b072f53d2c7434569874d9474c75cff868b4209 (patch) | |
tree | ed8d19ac94da22ab53447e631c2dfcbee0f05ee1 /sys/kern/kern_sig.c | |
parent | d97d613cc7833ee719f6ed1a8bc6c1247d38de5b (diff) | |
download | FreeBSD-src-4b072f53d2c7434569874d9474c75cff868b4209.zip FreeBSD-src-4b072f53d2c7434569874d9474c75cff868b4209.tar.gz |
Avoid kernel panic when attaching a process which may not be stopped
by debugger, e.g process is dumping core. Only access p_xthread if
P_STOPPED_TRACE is set, this means thread is ready to exchange signal
with debugger, print a warning if P_STOPPED_TRACE is not set due to
some bugs in other code, if there is.
The patch has been tested by Anish Mistry mistry.7 at osu dot edu, and
is slightly adjusted.
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r-- | sys/kern/kern_sig.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 4c7f6a9..cd2402e 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -2272,7 +2272,6 @@ do_tdsignal(struct proc *p, struct thread *td, int sig, ksiginfo_t *ksi) goto out; p->p_flag |= P_STOPPED_SIG; p->p_xstat = sig; - p->p_xthread = td; mtx_lock_spin(&sched_lock); FOREACH_THREAD_IN_PROC(p, td0) { if (TD_IS_SLEEPING(td0) && @@ -2599,7 +2598,6 @@ issignal(td) &p->p_mtx.mtx_object, "Catching SIGSTOP"); p->p_flag |= P_STOPPED_SIG; p->p_xstat = sig; - p->p_xthread = td; mtx_lock_spin(&sched_lock); FOREACH_THREAD_IN_PROC(p, td0) { if (TD_IS_SLEEPING(td0) && |