diff --git a/src/ipc.c b/src/ipc.c index 26e39692b9c58f49b4f1abf29399b079abb313f9..8b54cabbdb9f4d8637c94c13369f0f731c9e5558 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -764,6 +764,9 @@ rt_err_t rt_mutex_release(rt_mutex_t mutex) &(mutex->owner->init_priority)); } + /* increase value */ + mutex->value ++; + /* wakeup suspended thread */ if (mutex->value <= 0 && mutex->parent.suspend_thread_count > 0) { @@ -783,8 +786,9 @@ rt_err_t rt_mutex_release(rt_mutex_t mutex) } else { - /* increase value */ - mutex->value ++; + /* clear owner */ + mutex->owner = RT_NULL; + mutex->original_priority = 0; } /* enable interrupt */