/*******************************************************
- * Mutexes with priority ceiling
+ * Mutexes with priority/bandwidth inheritance
******************************************************/
int fosa_mutex_init(frsh_mutex_t *mutex, int prioceiling)
{
- /* priority ceiling if, for now, ignored */
- return pthread_mutex_init(mutex, NULL);
+ pthread_mutexattr_t mutex_attr;
+
+ /* prioceiling serves as a flag */
+ if (prioceiling) {
+ /* We use priority inheritance as the default protocol */
+ pthread_mutexattr_init(&mutex_attr);
+ pthread_mutexattr_setprotocol(&mutex_attr, PTHREAD_PRIO_INHERIT);
+
+ return pthread_mutex_init(mutex, &mutex_attr);
+ } else
+ return pthread_mutex_init(mutex, NULL);
}
int fosa_mutex_destroy(frsh_mutex_t *mutex)