From 51c30289ae7e0ba3bfaaa08e7a2f002b4e0d3c85 Mon Sep 17 00:00:00 2001 From: wangbowen6 Date: Wed, 1 Mar 2023 15:43:21 +0800 Subject: [PATCH] sched: add critical section in nxsched_get_stateinfo Signed-off-by: wangbowen6 --- sched/sched/sched_get_stateinfo.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sched/sched/sched_get_stateinfo.c b/sched/sched/sched_get_stateinfo.c index 1f1d1d8444..10ae918012 100644 --- a/sched/sched/sched_get_stateinfo.c +++ b/sched/sched/sched_get_stateinfo.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "nuttx/sched.h" /**************************************************************************** @@ -80,16 +81,23 @@ static FAR const char * const g_statenames[] = void nxsched_get_stateinfo(FAR struct tcb_s *tcb, FAR char *state, size_t length) { + irqstate_t flags; + /* if the state is waiting mutex */ + flags = enter_critical_section(); + if (tcb->task_state == TSTATE_WAIT_SEM && ((FAR sem_t *)(tcb->waitobj))->flags & SEM_TYPE_MUTEX) { - snprintf(state, length, "Waiting,Mutex:%d", - ((FAR mutex_t *)(tcb->waitobj))->holder); + pid_t holder = ((FAR mutex_t *)(tcb->waitobj))->holder; + leave_critical_section(flags); + + snprintf(state, length, "Waiting,Mutex:%d", holder); } else { + leave_critical_section(flags); strlcpy(state, g_statenames[tcb->task_state], length); } }