Ver Fonte

[Kernel] Fix the critical issue under smp

Bernard Xiong há 6 anos atrás
pai
commit
d517389e52
1 ficheiros alterados com 11 adições e 0 exclusões
  1. 11 0
      src/scheduler.c

+ 11 - 0
src/scheduler.c

@@ -792,6 +792,12 @@ void rt_enter_critical(void)
     level = rt_hw_local_irq_disable();
 
     current_thread = rt_cpu_self()->current_thread;
+    if (!current_thread)
+    {
+        rt_hw_local_irq_enable(level);
+        return ;
+    }
+
     /*
      * the maximal number of nest is RT_UINT16_MAX, which is big
      * enough and does not check here
@@ -842,6 +848,11 @@ void rt_exit_critical(void)
     level = rt_hw_local_irq_disable();
 
     current_thread = rt_cpu_self()->current_thread;
+    if (!current_thread)
+    {
+        rt_hw_local_irq_enable(level);
+        return ;
+    }
 
     current_thread->scheduler_lock_nest --;