From: Matthew Dillon Date: Thu, 21 Feb 2013 23:32:12 +0000 (-0800) Subject: kernel - Add critical section in lwkt_yield_quick() X-Git-Tag: v3.4.0rc~248 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/9c99cb336b475c5531fb726194c7f03049740570 kernel - Add critical section in lwkt_yield_quick() * Add a critical section to protect the clearing of the LWKT reschedule bit against gd_tdrunq. --- diff --git a/sys/kern/lwkt_thread.c b/sys/kern/lwkt_thread.c index b7979a0171..27fd4d775c 100644 --- a/sys/kern/lwkt_thread.c +++ b/sys/kern/lwkt_thread.c @@ -1178,12 +1178,14 @@ lwkt_yield_quick(void) if ((gd->gd_reqflags & RQF_IDLECHECK_MASK) && td->td_nest_count < 2) splz(); if (lwkt_resched_wanted()) { + crit_enter(); if (TAILQ_FIRST(&gd->gd_tdrunq) == td) { clear_lwkt_resched(); } else { lwkt_schedule_self(curthread); lwkt_switch(); } + crit_exit(); } }