diff options
| author | Bernard Xiong <[email protected]> | 2019-11-13 08:59:39 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-11-13 08:59:39 +0800 |
| commit | 69e8c0324e77d7c30634d2a74264fd4fc171ec24 (patch) | |
| tree | 81f278a6bc96d3bdb1f92ca1988131b3454e51bb /src | |
| parent | 939e2486c3e4f98be5a1ce0ec474e9b3e7cd9663 (diff) | |
| parent | 6fca4a77224a59c8f0fa50e5399600b9c5080706 (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')
| -rw-r--r-- | src/scheduler.c | 17 |
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; } |
