[Kernel] Fix the signal issue when the context switch is triggered but not immediately handled.
This commit is contained in:
parent
e8a864c7c8
commit
6fca4a7722
|
@ -379,7 +379,12 @@ void rt_schedule(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* enable interrupt */
|
||||||
|
rt_hw_interrupt_enable(level);
|
||||||
|
|
||||||
#ifdef RT_USING_SIGNALS
|
#ifdef RT_USING_SIGNALS
|
||||||
|
/* check stat of thread for signal */
|
||||||
|
level = rt_hw_interrupt_disable();
|
||||||
if (current_thread->stat & RT_THREAD_STAT_SIGNAL_PENDING)
|
if (current_thread->stat & RT_THREAD_STAT_SIGNAL_PENDING)
|
||||||
{
|
{
|
||||||
extern void rt_thread_handle_sig(rt_bool_t clean_state);
|
extern void rt_thread_handle_sig(rt_bool_t clean_state);
|
||||||
|
@ -395,9 +400,6 @@ void rt_schedule(void)
|
||||||
{
|
{
|
||||||
rt_hw_interrupt_enable(level);
|
rt_hw_interrupt_enable(level);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
/* enable interrupt */
|
|
||||||
rt_hw_interrupt_enable(level);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__exit:
|
__exit:
|
||||||
|
@ -477,7 +479,13 @@ void rt_schedule(void)
|
||||||
|
|
||||||
rt_hw_context_switch((rt_ubase_t)&from_thread->sp,
|
rt_hw_context_switch((rt_ubase_t)&from_thread->sp,
|
||||||
(rt_ubase_t)&to_thread->sp);
|
(rt_ubase_t)&to_thread->sp);
|
||||||
|
|
||||||
|
/* enable interrupt */
|
||||||
|
rt_hw_interrupt_enable(level);
|
||||||
|
|
||||||
#ifdef RT_USING_SIGNALS
|
#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)
|
if (rt_current_thread->stat & RT_THREAD_STAT_SIGNAL_PENDING)
|
||||||
{
|
{
|
||||||
extern void rt_thread_handle_sig(rt_bool_t clean_state);
|
extern void rt_thread_handle_sig(rt_bool_t clean_state);
|
||||||
|
@ -493,9 +501,6 @@ void rt_schedule(void)
|
||||||
{
|
{
|
||||||
rt_hw_interrupt_enable(level);
|
rt_hw_interrupt_enable(level);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
/* enable interrupt */
|
|
||||||
rt_hw_interrupt_enable(level);
|
|
||||||
#endif
|
#endif
|
||||||
goto __exit;
|
goto __exit;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue