summaryrefslogtreecommitdiff
path: root/src/scheduler.c
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2019-11-13 08:59:39 +0800
committerGitHub <[email protected]>2019-11-13 08:59:39 +0800
commit69e8c0324e77d7c30634d2a74264fd4fc171ec24 (patch)
tree81f278a6bc96d3bdb1f92ca1988131b3454e51bb /src/scheduler.c
parent939e2486c3e4f98be5a1ce0ec474e9b3e7cd9663 (diff)
parent6fca4a77224a59c8f0fa50e5399600b9c5080706 (diff)
Merge pull request #3199 from BernardXiong/fix_signal_issue
[Kernel] Fix the signal issue when the context switch is triggered bu…
Diffstat (limited to 'src/scheduler.c')
-rw-r--r--src/scheduler.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/scheduler.c b/src/scheduler.c
index edcf11dba5..6baaa9627a 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -384,7 +384,12 @@ void rt_schedule(void)
}
}
+ /* enable interrupt */
+ rt_hw_interrupt_enable(level);
+
#ifdef RT_USING_SIGNALS
+ /* check stat of thread for signal */
+ level = rt_hw_interrupt_disable();
if (current_thread->stat & RT_THREAD_STAT_SIGNAL_PENDING)
{
extern void rt_thread_handle_sig(rt_bool_t clean_state);
@@ -400,9 +405,6 @@ void rt_schedule(void)
{
rt_hw_interrupt_enable(level);
}
-#else
- /* enable interrupt */
- rt_hw_interrupt_enable(level);
#endif
__exit:
@@ -487,7 +489,13 @@ void rt_schedule(void)
rt_hw_context_switch((rt_ubase_t)&from_thread->sp,
(rt_ubase_t)&to_thread->sp);
+
+ /* enable interrupt */
+ rt_hw_interrupt_enable(level);
+
#ifdef RT_USING_SIGNALS
+ /* check stat of thread for signal */
+ level = rt_hw_interrupt_disable();
if (rt_current_thread->stat & RT_THREAD_STAT_SIGNAL_PENDING)
{
extern void rt_thread_handle_sig(rt_bool_t clean_state);
@@ -503,9 +511,6 @@ void rt_schedule(void)
{
rt_hw_interrupt_enable(level);
}
-#else
- /* enable interrupt */
- rt_hw_interrupt_enable(level);
#endif
goto __exit;
}