diff options
author | davidxu <davidxu@FreeBSD.org> | 2006-06-14 03:46:03 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2006-06-14 03:46:03 +0000 |
commit | 3cbbc973d76077cd98f6aa8896c813788c1292e6 (patch) | |
tree | 90a1b0d531edd974619bfe569bf8378b2bfc8a9d /sys/kern | |
parent | 9cbae6be494f0ef79e4125b998bf086dbd40f747 (diff) | |
download | FreeBSD-src-3cbbc973d76077cd98f6aa8896c813788c1292e6.zip FreeBSD-src-3cbbc973d76077cd98f6aa8896c813788c1292e6.tar.gz |
Clear ke_runq before calling maybe_preempt, this avoids a
KASSERT(ke->ke_runq == NULL) panic when the sched_add is recursively
called by maybe_preempt.
Reported by: Wojciech A. Koszek < dunstan at freebsd dot czest dot pl >
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/sched_core.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/sched_core.c b/sys/kern/sched_core.c index 5acbb5a..3f5554b 100644 --- a/sys/kern/sched_core.c +++ b/sys/kern/sched_core.c @@ -2150,8 +2150,10 @@ activate_it: if (ke->ke_runq == my_ksq->ksq_curr && td->td_priority < curthread->td_priority) { curthread->td_flags |= TDF_NEEDRESCHED; + ke->ke_runq = NULL; if (preemptive && maybe_preempt(td)) return; + ke->ke_runq = my_ksq->ksq_curr; if (curthread->td_ksegrp->kg_pri_class == PRI_IDLE) td->td_owepreempt = 1; } |