From cfa3a9f63458c11794d674fe4b6bd579e74e2f49 Mon Sep 17 00:00:00 2001 From: ligd Date: Tue, 23 Mar 2021 18:07:39 +0800 Subject: [PATCH] sched/init/nx_start.c: enter_critical_section when check heap & stack in idle Change-Id: I2ef95ee8e1dc1ba3e74c1d6c8c6af20f53be85c7 Signed-off-by: ligd --- sched/init/nx_start.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/sched/init/nx_start.c b/sched/init/nx_start.c index 76869e67c39..fa23c286895 100644 --- a/sched/init/nx_start.c +++ b/sched/init/nx_start.c @@ -816,17 +816,30 @@ void nx_start(void) syslog(LOG_INFO, "CPU0: Beginning Idle Loop\n"); for (; ; ) { - /* Check heap & stack in idle thread */ - - kmm_checkcorruption(); - #if defined(CONFIG_STACK_COLORATION) && defined(CONFIG_DEBUG_MM) + irqstate_t flags; + + /* Check stack in idle thread */ + + flags = enter_critical_section(); + for (i = 0; i < CONFIG_MAX_TASKS && g_pidhash[i].tcb; i++) { - assert(up_check_tcbstack_remain(g_pidhash[i].tcb) > 0); + if (up_check_tcbstack_remain(g_pidhash[i].tcb) <= 0) + { + _alert("Stack check failed, pid %d, name %s\n", + g_pidhash[i].tcb->pid, g_pidhash[i].tcb->name); + PANIC(); + } } + + leave_critical_section(flags); #endif + /* Check heap in idle thread */ + + kmm_checkcorruption(); + /* Perform any processor-specific idle state operations */ up_idle();