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:
parent
f501bcbeef
commit
e3c3079582
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue