Преглед на файлове

Kernel: Fix dumb race in Scheduler::yield() debug code.

It was perfectly possible for Scheduler::yield() to get interrupted after
setting s_in_yield but before disabling interrupts.
Andreas Kling преди 6 години
родител
ревизия
e911caeb10
променени са 1 файла, в които са добавени 1 реда и са изтрити 1 реда
  1. 1 1
      Kernel/Scheduler.cpp

+ 1 - 1
Kernel/Scheduler.cpp

@@ -164,6 +164,7 @@ bool Scheduler::pick_next()
 
 
 bool Scheduler::yield()
 bool Scheduler::yield()
 {
 {
+    InterruptDisabler disabler;
     ASSERT(!s_in_yield);
     ASSERT(!s_in_yield);
     s_in_yield = true;
     s_in_yield = true;
 
 
@@ -174,7 +175,6 @@ bool Scheduler::yield()
 
 
     //dbgprintf("%s<%u> yield()\n", current->name().characters(), current->pid());
     //dbgprintf("%s<%u> yield()\n", current->name().characters(), current->pid());
 
 
-    InterruptDisabler disabler;
     if (!pick_next()) {
     if (!pick_next()) {
         s_in_yield = false;
         s_in_yield = false;
         return 1;
         return 1;