Initially Locked Priority Ceiling Semaphores

Sebastian Huber sebastian.huber at embedded-brains.de
Wed May 21 14:41:07 UTC 2014


Hello,

you can create a Classic API semaphore using the Priority Ceiling Protocol 
which is initially locked by the creating task.  In this case the creating task 
is not elevated to the ceiling priority:

CORE_mutex_Status _CORE_mutex_Initialize(
   CORE_mutex_Control           *the_mutex,
   Thread_Control               *executing,
   const CORE_mutex_Attributes  *the_mutex_attributes,
   bool                          initially_locked
)
{

/* Add this to the RTEMS environment later ?????????
   rtems_assert( initial_lock == CORE_MUTEX_LOCKED ||
                 initial_lock == CORE_MUTEX_UNLOCKED );
  */

   the_mutex->Attributes    = *the_mutex_attributes;

   if ( initially_locked ) {
     the_mutex->nest_count = 1;
     the_mutex->holder     = executing;
     if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
          _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {

       if ( executing->current_priority <
              the_mutex->Attributes.priority_ceiling )
        return CORE_MUTEX_STATUS_CEILING_VIOLATED;
#ifdef __RTEMS_STRICT_ORDER_MUTEX__
        _Chain_Prepend_unprotected( &executing->lock_mutex,
                                    &the_mutex->queue.lock_queue );
        the_mutex->queue.priority_before = executing->current_priority;
#endif

       executing->resource_count++;
     }
   } else {
     the_mutex->nest_count = 0;
     the_mutex->holder     = NULL;
   }

   _Thread_queue_Initialize(
     &the_mutex->Wait_queue,
     _CORE_mutex_Is_fifo( the_mutex_attributes ) ?
       THREAD_QUEUE_DISCIPLINE_FIFO : THREAD_QUEUE_DISCIPLINE_PRIORITY,
     STATES_WAITING_FOR_MUTEX,
     CORE_MUTEX_TIMEOUT
   );

   return CORE_MUTEX_STATUS_SUCCESSFUL;
}

Is this working as intended?

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the devel mailing list