diff options
Diffstat (limited to 'src/ipc.c')
| -rw-r--r-- | src/ipc.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -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); /** |
