pthread: copy priority inheritance fix from espressif

commit 202e6c8984255b551e29e3182e091cf7cd0153b0
This commit is contained in:
Michael Balzer 2020-12-21 13:55:27 +01:00
parent d59ed8bba0
commit a5ee881789
1 changed files with 8 additions and 5 deletions

View File

@ -591,12 +591,15 @@ int pthread_mutex_destroy(pthread_mutex_t *mutex)
return EBUSY;
}
// FreeRTOS mutex must not be deleted while taken (breaks priority inheritance):
vTaskSuspendAll();
pthread_mutex_unlock(mutex);
if (mux->type == PTHREAD_MUTEX_RECURSIVE) {
res = xSemaphoreGiveRecursive(mux->sem);
} else {
res = xSemaphoreGive(mux->sem);
}
if (res != pdTRUE) {
assert(false && "Failed to release mutex!");
}
vSemaphoreDelete(mux->sem);
xTaskResumeAll();
free(mux);
return 0;