summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_sig.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r--sys/kern/kern_sig.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index ce5680a..4d2cfa6 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -732,9 +732,11 @@ sigwait(struct thread *td, struct sigwait_args *uap)
error = copyout(&info.si_signo, uap->sig, sizeof(info.si_signo));
/* Repost if we got an error. */
- if (error && info.si_signo)
+ if (error && info.si_signo) {
+ PROC_LOCK(td->td_proc);
tdsignal(td, info.si_signo);
-
+ PROC_UNLOCK(td->td_proc);
+ }
return (error);
}
/*
@@ -768,9 +770,11 @@ sigtimedwait(struct thread *td, struct sigtimedwait_args *uap)
error = copyout(&info, uap->info, sizeof(info));
/* Repost if we got an error. */
- if (error && info.si_signo)
+ if (error && info.si_signo) {
+ PROC_LOCK(td->td_proc);
tdsignal(td, info.si_signo);
-
+ PROC_UNLOCK(td->td_proc);
+ }
return (error);
}
@@ -794,9 +798,11 @@ sigwaitinfo(struct thread *td, struct sigwaitinfo_args *uap)
error = copyout(&info, uap->info, sizeof(info));
/* Repost if we got an error. */
- if (error && info.si_signo)
+ if (error && info.si_signo) {
+ PROC_LOCK(td->td_proc);
tdsignal(td, info.si_signo);
-
+ PROC_UNLOCK(td->td_proc);
+ }
return (error);
}
OpenPOWER on IntegriCloud