From 2c69cab2ed2dd51c2d2b3305920318c3e09c4bcc Mon Sep 17 00:00:00 2001 From: jhb Date: Thu, 18 Jan 2001 08:19:25 +0000 Subject: Protect p_stat and p_oncpu with sched_lock in forward_signal(). --- sys/i386/i386/mp_machdep.c | 11 +++++++++-- sys/i386/i386/mptable.c | 11 +++++++++-- sys/i386/include/mptable.h | 11 +++++++++-- 3 files changed, 27 insertions(+), 6 deletions(-) (limited to 'sys/i386') diff --git a/sys/i386/i386/mp_machdep.c b/sys/i386/i386/mp_machdep.c index 945a588..907a2e2 100644 --- a/sys/i386/i386/mp_machdep.c +++ b/sys/i386/i386/mp_machdep.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<p_oncpu) + mtx_enter(&sched_lock, MTX_SPIN); + if (id == p->p_oncpu) { + mtx_exit(&sched_lock, MTX_SPIN); return; + } } } diff --git a/sys/i386/i386/mptable.c b/sys/i386/i386/mptable.c index 945a588..907a2e2 100644 --- a/sys/i386/i386/mptable.c +++ b/sys/i386/i386/mptable.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<p_oncpu) + mtx_enter(&sched_lock, MTX_SPIN); + if (id == p->p_oncpu) { + mtx_exit(&sched_lock, MTX_SPIN); return; + } } } diff --git a/sys/i386/include/mptable.h b/sys/i386/include/mptable.h index 945a588..907a2e2 100644 --- a/sys/i386/include/mptable.h +++ b/sys/i386/include/mptable.h @@ -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<p_oncpu) + mtx_enter(&sched_lock, MTX_SPIN); + if (id == p->p_oncpu) { + mtx_exit(&sched_lock, MTX_SPIN); return; + } } } -- cgit v1.1