summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-04-16 09:21:57 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-12 14:01:24 +0200
commit3f9cd206a38a6fe51d6f95e4ac2599643b4b339c (patch)
tree5792866c2c72acfef5b2460a8e7c596ef9d2ea86
parentd6f1e14698638390415c41b7179540c8b8294a46 (diff)
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.
-rw-r--r--cpukit/include/rtems/score/coremuteximpl.h20
1 files changed, 10 insertions, 10 deletions
diff --git a/cpukit/include/rtems/score/coremuteximpl.h b/cpukit/include/rtems/score/coremuteximpl.h
index cbc1e720fb..6b5c240105 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,