Index: sys/kern/subr_syscall.c =================================================================== --- sys/kern/subr_syscall.c +++ sys/kern/subr_syscall.c @@ -70,11 +70,9 @@ if (__predict_false(td->td_cowgen != p->p_cowgen)) thread_cow_update(td); traced = (p->p_flag & P_TRACED) != 0; - if (__predict_false(traced || td->td_dbgflags & TDB_USERWR)) { + if (__predict_false(traced)) { PROC_LOCK(p); - td->td_dbgflags &= ~TDB_USERWR; - if (traced) - td->td_dbgflags |= TDB_SCE; + td->td_dbgflags |= TDB_SCE; PROC_UNLOCK(p); } error = (p->p_sysent->sv_fetch_syscall_args)(td); Index: sys/kern/subr_trap.c =================================================================== --- sys/kern/subr_trap.c +++ sys/kern/subr_trap.c @@ -228,6 +228,7 @@ flags = td->td_flags; td->td_flags &= ~(TDF_ASTPENDING | TDF_NEEDSIGCHK | TDF_NEEDSUSPCHK | TDF_NEEDRESCHED | TDF_ALRMPEND | TDF_PROFPEND | TDF_MACPEND); + td->td_dbgflags &= ~TDB_USERWR; thread_unlock(td); VM_CNT_INC(v_trap); Index: sys/kern/sys_process.c =================================================================== --- sys/kern/sys_process.c +++ sys/kern/sys_process.c @@ -1037,6 +1037,13 @@ p->p_pid, data); p->p_ptevents = 0; FOREACH_THREAD_IN_PROC(p, td3) { + /* + * Request AST to clear TDB_USERWR. + */ + thread_lock(td3); + td3->td_flags |= TDF_ASTPENDING; + thread_unlock(td3); + if ((td3->td_dbgflags & TDB_FSTP) != 0) { sigqueue_delete(&td3->td_sigqueue, SIGSTOP);