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 <vr_qemu@t-online.de>
This commit is contained in:
Volker Rümelin 2021-06-04 20:01:20 +02:00 committed by Kevin O'Connor
parent f501bcbeef
commit e3c3079582
1 changed files with 2 additions and 3 deletions

View File

@ -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