From: Volker RĂ¼melin Date: Fri, 4 Jun 2021 18:01:20 +0000 (+0200) Subject: stacks: call check_irqs() after switch_next() X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=e3c30795823672eec9bde75187e184f23ed98d70;p=osstest%2Fseabios.git stacks: call check_irqs() after switch_next() In function run_thread() the function check_irqs() gets called after the thread switch for atomic handoff reasons. In yield() it's the other way round. If check_irqs() is called after run_thread() and check_irqs() is called before switch_next() in yield(), it can happen in a constructed case that a background thread runs twice without a check_irqs() call in between. Call check_irqs() after switch_next() in yield() to prevent this. Signed-off-by: Volker RĂ¼melin --- diff --git a/src/stacks.c b/src/stacks.c index df32325..4c8e5df 100644 --- a/src/stacks.c +++ b/src/stacks.c @@ -629,12 +629,11 @@ yield(void) return; } struct thread_info *cur = getCurThread(); + // Switch to the next thread + switch_next(cur); if (cur == &MainThread) // Permit irqs to fire check_irqs(); - - // Switch to the next thread - switch_next(cur); } void VISIBLE16