diff options
Diffstat (limited to 'sys/kern/kern_synch.c')
-rw-r--r-- | sys/kern/kern_synch.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c index aebdfcb3c14..4b711711c02 100644 --- a/sys/kern/kern_synch.c +++ b/sys/kern/kern_synch.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_synch.c,v 1.97 2011/07/07 18:00:33 guenther Exp $ */ +/* $OpenBSD: kern_synch.c,v 1.98 2011/12/11 19:42:28 guenther Exp $ */ /* $NetBSD: kern_synch.c,v 1.37 1996/04/22 01:38:37 christos Exp $ */ /* @@ -282,7 +282,7 @@ sleep_setup_signal(struct sleep_state *sls, int prio) * stopped, p->p_wchan will be 0 upon return from CURSIG. */ atomic_setbits_int(&p->p_flag, P_SINTR); - if ((sls->sls_sig = CURSIG(p)) != 0) { + if (p->p_p->ps_single != NULL || (sls->sls_sig = CURSIG(p)) != 0) { if (p->p_wchan) unsleep(p); p->p_stat = SONPROC; @@ -297,8 +297,11 @@ int sleep_finish_signal(struct sleep_state *sls) { struct proc *p = curproc; + int error; if (sls->sls_catch != 0) { + if ((error = single_thread_check(p, 1))) + return (error); if (sls->sls_sig != 0 || (sls->sls_sig = CURSIG(p)) != 0) { if (p->p_sigacts->ps_sigintr & sigmask(sls->sls_sig)) return (EINTR); |