diff options
author | scottl <scottl@FreeBSD.org> | 2004-08-20 05:18:50 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2004-08-20 05:18:50 +0000 |
commit | b336a56514b18fa6a85b32c7b2036771e3362d77 (patch) | |
tree | 1fa3b71d27147e3e39bb1aaf9f9c9d40944f7e65 /sys/kern | |
parent | c394cda927398ab075cbf0d89168a6346f5767cb (diff) | |
download | FreeBSD-src-b336a56514b18fa6a85b32c7b2036771e3362d77.zip FreeBSD-src-b336a56514b18fa6a85b32c7b2036771e3362d77.tar.gz |
In maybe_preempt(), ignore threads that are in an inconsistent state. This
is an effective band-aid for at least some of the scheduler corruption seen
recently. The real fix will involve protecting threads while they are
inconsistent, and will come later.
Submitted by: julian
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_switch.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/kern_switch.c b/sys/kern/kern_switch.c index 92e229e..f2aa3e0 100644 --- a/sys/kern/kern_switch.c +++ b/sys/kern/kern_switch.c @@ -522,6 +522,10 @@ maybe_preempt(struct thread *td) * to the new thread. */ ctd = curthread; + + if ((ctd->td_kse == NULL) || (ctd->td_kse->ke_thread != ctd)) + return (0); + pri = td->td_priority; cpri = ctd->td_priority; if (pri >= cpri || cold /* || dumping */ || TD_IS_INHIBITED(ctd) || |