diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-04-16 09:21:57 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-11-15 09:53:17 +0100 |
commit | 16b50ac63c994a0702f3ea585d639004c78995b6 (patch) | |
tree | 670e2886c58f6739f2d6b08d8009f6e36f45395f /cpukit/include/rtems | |
parent | score: Fix thread pinning assertions (diff) | |
download | rtems-16b50ac63c994a0702f3ea585d639004c78995b6.tar.bz2 |
score: Always check if a prio ceiling is defined
Priority ceiling semaphores (in contrast to MrsP semaphores) have only
one priority ceiling which is defined for the home scheduler of the task
which created the semaphore. Always check during a semaphore seize that
the home scheduler of the calling task is equal to this scheduler.
This avoids a scheduler mismatch if the semphore is acquired after the
calling thread blocked on the semaphore.
Diffstat (limited to 'cpukit/include/rtems')
-rw-r--r-- | cpukit/include/rtems/score/coremuteximpl.h | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/cpukit/include/rtems/score/coremuteximpl.h b/cpukit/include/rtems/score/coremuteximpl.h index 757efbde9b..1f9682a6b5 100644 --- a/cpukit/include/rtems/score/coremuteximpl.h +++ b/cpukit/include/rtems/score/coremuteximpl.h @@ -475,19 +475,19 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_ceiling_mutex_Seize( _CORE_mutex_Acquire_critical( &the_mutex->Recursive.Mutex, queue_context ); - owner = _CORE_mutex_Get_owner( &the_mutex->Recursive.Mutex ); - - if ( owner == NULL ) { #if defined(RTEMS_SMP) - if ( - _Thread_Scheduler_get_home( executing ) - != _CORE_ceiling_mutex_Get_scheduler( the_mutex ) - ) { - _CORE_mutex_Release( &the_mutex->Recursive.Mutex, queue_context ); - return STATUS_NOT_DEFINED; - } + if ( + _Thread_Scheduler_get_home( executing ) + != _CORE_ceiling_mutex_Get_scheduler( the_mutex ) + ) { + _CORE_mutex_Release( &the_mutex->Recursive.Mutex, queue_context ); + return STATUS_NOT_DEFINED; + } #endif + owner = _CORE_mutex_Get_owner( &the_mutex->Recursive.Mutex ); + + if ( owner == NULL ) { _Thread_queue_Context_clear_priority_updates( queue_context ); return _CORE_ceiling_mutex_Set_owner( the_mutex, |