Skip to content

Commit 96bd943

Browse files
committed
RTX5: Enable priority inheritance and robust mode
Add the attribute flash to enable priority inheritance and robust mode. The robust flag allows mutexes held by terminated threads to be properly released.
1 parent a84142f commit 96bd943

File tree

4 files changed

+11
-11
lines changed

4 files changed

+11
-11
lines changed

features/FEATURE_COMMON_PAL/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ static uint8_t sys_irq_disable_counter;
1313
static mbed_rtos_storage_mutex_t critical_mutex;
1414
static const osMutexAttr_t critical_mutex_attr = {
1515
.name = "nanostack_critical_mutex",
16-
.attr_bits = osMutexRecursive,
16+
.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust,
1717
.cb_mem = &critical_mutex,
1818
.cb_size = sizeof critical_mutex,
1919
};

features/FEATURE_COMMON_PAL/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ static osThreadId_t event_thread_id;
3030
static mbed_rtos_storage_mutex_t event_mutex;
3131
static const osMutexAttr_t event_mutex_attr = {
3232
.name = "nanostack_event_mutex",
33-
.attr_bits = osMutexRecursive,
33+
.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust,
3434
.cb_mem = &event_mutex,
3535
.cb_size = sizeof event_mutex,
3636
};

rtos/Mutex.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ void Mutex::constructor(const char *name)
4444
_attr.name = name ? name : "aplication_unnamed_mutex";
4545
_attr.cb_mem = &_obj_mem;
4646
_attr.cb_size = sizeof(_obj_mem);
47-
_attr.attr_bits = osMutexRecursive;
47+
_attr.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust;
4848
_id = osMutexNew(&_attr);
4949
MBED_ASSERT(_id);
5050
}

rtos/mbed_boot.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ void $Sub$$__cpp_initialize__aeabi_(void)
363363
void pre_main()
364364
{
365365
singleton_mutex_attr.name = "singleton_mutex";
366-
singleton_mutex_attr.attr_bits = osMutexRecursive;
366+
singleton_mutex_attr.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust;
367367
singleton_mutex_attr.cb_size = sizeof(singleton_mutex_obj);
368368
singleton_mutex_attr.cb_mem = &singleton_mutex_obj;
369369
singleton_mutex_id = osMutexNew(&singleton_mutex_attr);
@@ -383,7 +383,7 @@ extern int main(int argc, char* argv[]);
383383
void pre_main (void)
384384
{
385385
singleton_mutex_attr.name = "singleton_mutex";
386-
singleton_mutex_attr.attr_bits = osMutexRecursive;
386+
singleton_mutex_attr.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust;
387387
singleton_mutex_attr.cb_size = sizeof(singleton_mutex_obj);
388388
singleton_mutex_attr.cb_mem = &singleton_mutex_obj;
389389
singleton_mutex_id = osMutexNew(&singleton_mutex_attr);
@@ -440,19 +440,19 @@ int __wrap_main(void) {
440440
void pre_main(void)
441441
{
442442
singleton_mutex_attr.name = "singleton_mutex";
443-
singleton_mutex_attr.attr_bits = osMutexRecursive;
443+
singleton_mutex_attr.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust;
444444
singleton_mutex_attr.cb_size = sizeof(singleton_mutex_obj);
445445
singleton_mutex_attr.cb_mem = &singleton_mutex_obj;
446446
singleton_mutex_id = osMutexNew(&singleton_mutex_attr);
447447

448448
malloc_mutex_attr.name = "malloc_mutex";
449-
malloc_mutex_attr.attr_bits = osMutexRecursive;
449+
malloc_mutex_attr.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust;
450450
malloc_mutex_attr.cb_size = sizeof(malloc_mutex_obj);
451451
malloc_mutex_attr.cb_mem = &malloc_mutex_obj;
452452
malloc_mutex_id = osMutexNew(&malloc_mutex_attr);
453453

454454
env_mutex_attr.name = "env_mutex";
455-
env_mutex_attr.attr_bits = osMutexRecursive;
455+
env_mutex_attr.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust;
456456
env_mutex_attr.cb_size = sizeof(env_mutex_obj);
457457
env_mutex_attr.cb_mem = &env_mutex_obj;
458458
env_mutex_id = osMutexNew(&env_mutex_attr);
@@ -526,7 +526,7 @@ static uint8_t low_level_init_needed;
526526
void pre_main(void)
527527
{
528528
singleton_mutex_attr.name = "singleton_mutex";
529-
singleton_mutex_attr.attr_bits = osMutexRecursive;
529+
singleton_mutex_attr.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust;
530530
singleton_mutex_attr.cb_size = sizeof(singleton_mutex_obj);
531531
singleton_mutex_attr.cb_mem = &singleton_mutex_obj;
532532
singleton_mutex_id = osMutexNew(&singleton_mutex_attr);
@@ -583,7 +583,7 @@ void __iar_system_Mtxinit(__iar_Rmtx *mutex) /* Initialize a system lock */
583583
attr.name = "system_mutex";
584584
attr.cb_mem = &std_mutex_sys[index];
585585
attr.cb_size = sizeof(std_mutex_sys[index]);
586-
attr.attr_bits = osMutexRecursive;
586+
attr.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust;
587587
std_mutex_id_sys[index] = osMutexNew(&attr);
588588
*mutex = (__iar_Rmtx*)&std_mutex_id_sys[index];
589589
return;
@@ -619,7 +619,7 @@ void __iar_file_Mtxinit(__iar_Rmtx *mutex) /* Initialize a file lock */
619619
attr.name = "file_mutex";
620620
attr.cb_mem = &std_mutex_file[index];
621621
attr.cb_size = sizeof(std_mutex_file[index]);
622-
attr.attr_bits = osMutexRecursive;
622+
attr.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust;
623623
std_mutex_id_file[index] = osMutexNew(&attr);
624624
*mutex = (__iar_Rmtx*)&std_mutex_id_file[index];
625625
return;

0 commit comments

Comments
 (0)