From 755bef6c5699ea4cc99cb40185fe2cb5b58c9385 Mon Sep 17 00:00:00 2001 From: dulibo1 Date: Wed, 17 Apr 2024 17:42:51 +0800 Subject: [PATCH] sched_smp:adjust the unlock order 1.nxsem_post wake up nxsched_smp_call; 2.stack smp_call_data_s may return; 3.nxsched_smp_call_handler access call_data->lock is not safety; so adjust the unlock order Signed-off-by: dulibo1 --- sched/sched/sched_smp.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sched/sched/sched_smp.c b/sched/sched/sched_smp.c index f43cb08ac74..94aab391300 100644 --- a/sched/sched/sched_smp.c +++ b/sched/sched/sched_smp.c @@ -137,6 +137,14 @@ int nxsched_smp_call_handler(int irq, FAR void *context, ret = call_data->func(call_data->arg); flags = enter_critical_section(); + if (spin_is_locked(&call_data->lock)) + { + if (--call_data->refcount == 0) + { + spin_unlock(&call_data->lock); + } + } + if (call_data->cookie != NULL) { if (ret < 0) @@ -146,14 +154,6 @@ int nxsched_smp_call_handler(int irq, FAR void *context, nxsem_post(&call_data->cookie->sem); } - - if (spin_is_locked(&call_data->lock)) - { - if (--call_data->refcount == 0) - { - spin_unlock(&call_data->lock); - } - } } up_cpu_paused_restore();