From 2440b4ef3943809cb6c61b67d84a8bcbf11efbee Mon Sep 17 00:00:00 2001 From: wangchengdong Date: Thu, 13 Nov 2025 10:15:55 +0800 Subject: [PATCH] sched/sched: Fix nxsched_suspend() logic nxsched_deliver_task() or nxsched_merge_pending() should only be called when a context switch is required. This behavior is independent of whether the current task is locked. Signed-off-by: Chengdong Wang --- sched/sched/sched_suspend.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sched/sched/sched_suspend.c b/sched/sched/sched_suspend.c index 4bbb6c8a780..e9934940f33 100644 --- a/sched/sched/sched_suspend.c +++ b/sched/sched/sched_suspend.c @@ -170,13 +170,12 @@ void nxsched_suspend(FAR struct tcb_s *tcb) { switch_needed = nxsched_remove_readytorun(tcb); - if (switch_needed || !nxsched_islocked_tcb(rtcb)) + if (switch_needed) { #ifdef CONFIG_SMP - switch_needed |= nxsched_deliver_task(cpu, tcb->cpu, - SWITCH_HIGHER); + nxsched_deliver_task(cpu, tcb->cpu, SWITCH_HIGHER); #else - switch_needed |= nxsched_merge_pending(); + nxsched_merge_pending(); #endif }