summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2006-06-14 03:46:03 +0000
committerdavidxu <davidxu@FreeBSD.org>2006-06-14 03:46:03 +0000
commit3cbbc973d76077cd98f6aa8896c813788c1292e6 (patch)
tree90a1b0d531edd974619bfe569bf8378b2bfc8a9d /sys
parent9cbae6be494f0ef79e4125b998bf086dbd40f747 (diff)
downloadFreeBSD-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')
-rw-r--r--sys/kern/sched_core.c2
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;
}
OpenPOWER on IntegriCloud