summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_sig.c
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2003-10-30 02:55:43 +0000
committerdavidxu <davidxu@FreeBSD.org>2003-10-30 02:55:43 +0000
commit91407731e5528326cfe14b333d57ac443ac1c888 (patch)
treed0acaa16fc6bbe8f66bc85029a54e393fd6c3e21 /sys/kern/kern_sig.c
parent8e63ac0e3853c02aaeafb63a881bbe069927f6a5 (diff)
downloadFreeBSD-src-91407731e5528326cfe14b333d57ac443ac1c888.zip
FreeBSD-src-91407731e5528326cfe14b333d57ac443ac1c888.tar.gz
Try to fetch thread mailbox address in page fault trap, so when thread
blocks in page fault hanlder, and upcall thread can be scheduled. It is useful if process is doing lots of mmap based I/O.
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r--sys/kern/kern_sig.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index ab98bb0..26ad4b1 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -1498,7 +1498,8 @@ trapsignal(struct thread *td, int sig, u_long code)
p = td->td_proc;
if (td->td_flags & TDF_SA) {
- thread_user_enter(p, td);
+ if (td->td_mailbox == NULL)
+ thread_user_enter(p, td);
PROC_LOCK(p);
if (td->td_mailbox) {
SIGDELSET(td->td_sigmask, sig);
OpenPOWER on IntegriCloud