summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_generic.c
diff options
context:
space:
mode:
authorjlemon <jlemon@FreeBSD.org>2000-11-21 20:22:34 +0000
committerjlemon <jlemon@FreeBSD.org>2000-11-21 20:22:34 +0000
commit71439be003f7e743f32a2f7d9fe94dfbdae25a7c (patch)
tree9f916f29ab4d2f980581c1b63b57b2cfef51656e /sys/kern/sys_generic.c
parenta3da3ab72cd06286d3802b38bba4ee1edd58dfb3 (diff)
downloadFreeBSD-src-71439be003f7e743f32a2f7d9fe94dfbdae25a7c.zip
FreeBSD-src-71439be003f7e743f32a2f7d9fe94dfbdae25a7c.tar.gz
Protect p_wchan with sched_lock in selwakeup().
Diffstat (limited to 'sys/kern/sys_generic.c')
-rw-r--r--sys/kern/sys_generic.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index 635db71..95224c8 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -1025,6 +1025,7 @@ selwakeup(sip)
sip->si_pid = 0;
if (p != NULL) {
s = splhigh();
+ mtx_enter(&sched_lock, MTX_SPIN);
if (p->p_wchan == (caddr_t)&selwait) {
if (p->p_stat == SSLEEP)
setrunnable(p);
@@ -1032,6 +1033,7 @@ selwakeup(sip)
unsleep(p);
} else if (p->p_flag & P_SELECT)
p->p_flag &= ~P_SELECT;
+ mtx_exit(&sched_lock, MTX_SPIN);
splx(s);
}
}
OpenPOWER on IntegriCloud