diff options
author | jhb <jhb@FreeBSD.org> | 2001-01-18 08:19:25 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-01-18 08:19:25 +0000 |
commit | 2c69cab2ed2dd51c2d2b3305920318c3e09c4bcc (patch) | |
tree | 78070ea3ed98fed47f504233504870f2df167510 /sys/amd64 | |
parent | 7fd26bda78626003dde4dc9944d1715d23e22a31 (diff) | |
download | FreeBSD-src-2c69cab2ed2dd51c2d2b3305920318c3e09c4bcc.zip FreeBSD-src-2c69cab2ed2dd51c2d2b3305920318c3e09c4bcc.tar.gz |
Protect p_stat and p_oncpu with sched_lock in forward_signal().
Diffstat (limited to 'sys/amd64')
-rw-r--r-- | sys/amd64/amd64/mp_machdep.c | 11 | ||||
-rw-r--r-- | sys/amd64/amd64/mptable.c | 11 | ||||
-rw-r--r-- | sys/amd64/include/mptable.h | 11 |
3 files changed, 27 insertions, 6 deletions
diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c index 945a588..907a2e2 100644 --- a/sys/amd64/amd64/mp_machdep.c +++ b/sys/amd64/amd64/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<<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; + } } } diff --git a/sys/amd64/amd64/mptable.c b/sys/amd64/amd64/mptable.c index 945a588..907a2e2 100644 --- a/sys/amd64/amd64/mptable.c +++ b/sys/amd64/amd64/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<<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; + } } } diff --git a/sys/amd64/include/mptable.h b/sys/amd64/include/mptable.h index 945a588..907a2e2 100644 --- a/sys/amd64/include/mptable.h +++ b/sys/amd64/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<<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; + } } } |