diff options
Diffstat (limited to 'sys/kern/subr_smp.c')
-rw-r--r-- | sys/kern/subr_smp.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/kern/subr_smp.c b/sys/kern/subr_smp.c index 945a588..907a2e2 100644 --- a/sys/kern/subr_smp.c +++ b/sys/kern/subr_smp.c @@ -2777,10 +2777,14 @@ forward_signal(struct proc *p) return; if (!forward_signal_enabled) return; + mtx_enter(&sched_lock, MTX_SPIN); while (1) { - if (p->p_stat != SRUN) + if (p->p_stat != SRUN) { + mtx_exit(&sched_lock, MTX_SPIN); return; + } id = p->p_oncpu; + mtx_exit(&sched_lock, MTX_SPIN); if (id == 0xff) return; map = (1<<id); @@ -2798,8 +2802,11 @@ forward_signal(struct proc *p) break; } } - if (id == p->p_oncpu) + mtx_enter(&sched_lock, MTX_SPIN); + if (id == p->p_oncpu) { + mtx_exit(&sched_lock, MTX_SPIN); return; + } } } |