From 0c6fe04ef736296bdbe85296dc76c8b5a64c39b9 Mon Sep 17 00:00:00 2001 From: hujun5 Date: Thu, 27 Nov 2025 15:44:16 +0800 Subject: [PATCH] Revert "sched_idletask: remove the check for whether tcb is NULL" This reverts commit 8f91054b1d3f88d528c5327340de41d4f63c4262. Signed-off-by: hujun5 --- sched/sched/sched_idletask.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/sched/sched/sched_idletask.c b/sched/sched/sched_idletask.c index 1c428c69025..dacaa19ff2a 100644 --- a/sched/sched/sched_idletask.c +++ b/sched/sched/sched_idletask.c @@ -60,18 +60,28 @@ bool sched_idletask(void) { FAR struct tcb_s *rtcb = this_task(); - DEBUGASSERT(rtcb); - - /* The IDLE task TCB is distinguishable by a few things: - * - * (1) It always lies at the end of the task list, - * (2) It always has priority zero, and - * (3) It should have the TCB_FLAG_CPU_LOCKED flag set. - * - * In the non-SMP case, the IDLE task will also have PID=0, but that - * is not a portable test because there are multiple IDLE tasks with - * different PIDs in the SMP configuration. + /* If called early in the initialization sequence, the tasks lists may not + * have been initialized and, in that case, rtcb may be NULL. */ - return is_idle_task(rtcb); + DEBUGASSERT(rtcb != NULL || !OSINIT_TASK_READY()); + if (rtcb != NULL) + { + /* The IDLE task TCB is distinguishable by a few things: + * + * (1) It always lies at the end of the task list, + * (2) It always has priority zero, and + * (3) It should have the TCB_FLAG_CPU_LOCKED flag set. + * + * In the non-SMP case, the IDLE task will also have PID=0, but that + * is not a portable test because there are multiple IDLE tasks with + * different PIDs in the SMP configuration. + */ + + return is_idle_task(rtcb); + } + + /* We must be on the IDLE thread if we are early in initialization */ + + return true; }