From 9631f04abefdea2341abe8cfe96cbabbdf432ab7 Mon Sep 17 00:00:00 2001 From: zms123456 <85141075+zmshahaha@users.noreply.github.com> Date: Sat, 7 Sep 2024 05:44:02 +0800 Subject: [utest]add mutex_pi_tc * add mutex_pi * fix assertion error when thread wakeup while waiting mutex --- src/ipc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/ipc.c b/src/ipc.c index a1a9c1f2da..fd8e9c66bf 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -1450,13 +1450,13 @@ static rt_err_t _rt_mutex_take(rt_mutex_t mutex, rt_int32_t timeout, int suspend rt_spin_lock(&(mutex->spinlock)); - if (thread->error == RT_EOK) + if (mutex->owner == thread) { /** * get mutex successfully * Note: assert to avoid an unexpected resume */ - RT_ASSERT(mutex->owner == thread); + RT_ASSERT(thread->error == RT_EOK); } else { @@ -1468,6 +1468,12 @@ static rt_err_t _rt_mutex_take(rt_mutex_t mutex, rt_int32_t timeout, int suspend /* get value first before calling to other APIs */ ret = thread->error; + /* unexpected resume */ + if (ret == RT_EOK) + { + ret = -RT_EINTR; + } + rt_sched_lock(&slvl); /** -- cgit v1.3.1