Browse Source

[Kernel] Fix the critical issue under smp

Bernard Xiong 6 years ago
parent
commit
d517389e52
1 changed files with 11 additions and 0 deletions
  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 --;