mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-02-07 01:44:41 +08:00
[kernel]fix scheduling exception caused by interrupt preemption in rt_schedule
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
* 2023-10-17 ChuShicheng Modify the timing of clearing RT_THREAD_STAT_YIELD flag bits
|
||||
* 2025-08-04 Pillar Add rt_scheduler_critical_switch_flag
|
||||
* 2025-08-20 RyanCW rt_scheduler_lock_nest use atomic operations
|
||||
* 2025-09-20 wdfk_prog fix scheduling exception caused by interrupt preemption in rt_schedule
|
||||
*/
|
||||
|
||||
#define __RT_IPC_SOURCE__
|
||||
@@ -283,12 +284,14 @@ void rt_schedule(void)
|
||||
rt_base_t level;
|
||||
struct rt_thread *to_thread;
|
||||
struct rt_thread *from_thread;
|
||||
/* using local variable to avoid unecessary function call */
|
||||
struct rt_thread *curr_thread = rt_thread_self();
|
||||
struct rt_thread *curr_thread;
|
||||
|
||||
/* disable interrupt */
|
||||
level = rt_hw_interrupt_disable();
|
||||
|
||||
/* using local variable to avoid unnecessary function call */
|
||||
curr_thread = rt_thread_self();
|
||||
|
||||
/* check the scheduler is enabled or not */
|
||||
if (rt_scheduler_lock_nest == 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user