diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-11-29 06:23:27 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-12-04 10:53:39 +0100 |
commit | 6c2b8a4b35536a5f99ba1ef91139485b011dafc1 (patch) | |
tree | b1ab330104094ec83051c932c4d5cb9e653a4568 /cpukit/score/src/apimutexlock.c | |
parent | ada/sp09: Fix timer server test case (diff) | |
download | rtems-6c2b8a4b35536a5f99ba1ef91139485b011dafc1.tar.bz2 |
score: Use self-contained API mutex
Use a self-contained recursive mutex for API_Mutex_Control. The API
mutexes are protected against asynchronous thread cancellation.
Add dedicated mutexes for libatomic and TOD.
Close #2629.
Close #2630.
Diffstat (limited to 'cpukit/score/src/apimutexlock.c')
-rw-r--r-- | cpukit/score/src/apimutexlock.c | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/cpukit/score/src/apimutexlock.c b/cpukit/score/src/apimutexlock.c index 312dcc2993..46a48a3e50 100644 --- a/cpukit/score/src/apimutexlock.c +++ b/cpukit/score/src/apimutexlock.c @@ -20,30 +20,18 @@ #endif #include <rtems/score/apimutex.h> -#include <rtems/score/coremuteximpl.h> #include <rtems/score/threadimpl.h> void _API_Mutex_Lock( API_Mutex_Control *the_mutex ) { - Thread_Life_state previous_thread_life_state; - Thread_queue_Context queue_context; + Thread_Life_state previous_thread_life_state; previous_thread_life_state = _Thread_Set_life_protection( THREAD_LIFE_PROTECTED ); - _Thread_queue_Context_initialize( &queue_context ); - _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context ); - _Thread_queue_Context_set_enqueue_do_nothing_extra( &queue_context ); - _CORE_recursive_mutex_Seize( - &the_mutex->Mutex, - CORE_MUTEX_TQ_PRIORITY_INHERIT_OPERATIONS, - _Thread_Executing, - true, - _CORE_recursive_mutex_Seize_nested, - &queue_context - ); + _Mutex_recursive_Acquire( &the_mutex->Mutex ); - if ( the_mutex->Mutex.nest_level == 0 ) { + if ( the_mutex->Mutex._nest_level == 0 ) { the_mutex->previous_thread_life_state = previous_thread_life_state; } } |