From d517389e521f2f2cff4f2a04631a5c952719ce73 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Thu, 4 Apr 2019 10:06:28 +0800 Subject: [PATCH] [Kernel] Fix the critical issue under smp --- src/scheduler.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/scheduler.c b/src/scheduler.c index 37b262d83b..0028c98314 100644 --- a/src/scheduler.c +++ b/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 --;