From 1b7a15501c8cd5d08ccd01b408c6dedb46e5ab1c Mon Sep 17 00:00:00 2001 From: Bartek Szatkowski Date: Tue, 27 Jun 2017 14:39:34 +0100 Subject: [PATCH] RTX: Fixed RTXv5 mutex owner list handling. The prev-pointer of the running threads mutex list was not set when multiple mutexes are acquired at a time. This leads to a corrupted list if the mutexes are not freed in reversed order. Original commit for CMSIS_5: commit 729f6ab08540342b7de7612fac103539d5b2f168 Author: Jonatan Antoni Date: Wed Apr 19 15:38:43 2017 +0200 --- rtos/rtx5/TARGET_CORTEX_M/rtx_mutex.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rtos/rtx5/TARGET_CORTEX_M/rtx_mutex.c b/rtos/rtx5/TARGET_CORTEX_M/rtx_mutex.c index c123d7f7cd..2151c0251d 100644 --- a/rtos/rtx5/TARGET_CORTEX_M/rtx_mutex.c +++ b/rtos/rtx5/TARGET_CORTEX_M/rtx_mutex.c @@ -187,6 +187,9 @@ osStatus_t svcRtxMutexAcquire (osMutexId_t mutex_id, uint32_t timeout) { mutex->owner_thread = runnig_thread; mutex->owner_next = runnig_thread->mutex_list; mutex->owner_prev = NULL; + if (runnig_thread->mutex_list != NULL) { + runnig_thread->mutex_list->owner_prev = mutex; + } runnig_thread->mutex_list = mutex; mutex->lock = 1U; EvrRtxMutexAcquired(mutex, mutex->lock);