diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c index f5fe14f8a61..7f451069d78 100644 --- a/sys/i386/i386/trap.c +++ b/sys/i386/i386/trap.c @@ -315,6 +315,9 @@ trap(frame) break; case T_PAGEFLT: /* page fault */ + if (td->td_flags & TDF_SA) + thread_user_enter(p, td); + i = trap_pfault(&frame, TRUE, eva); #if defined(I586_CPU) && !defined(NO_F00F_HACK) if (i == -2) { diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index ab98bb0e36c..26ad4b19aa8 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);