diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-14 11:45:22 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-22 14:00:27 +0200 |
commit | 2df7fcff883856cd2fa8a56e9c509a0674bfb01a (patch) | |
tree | c277f34f4cac80f4a629c4438f51b6dd66102625 /cpukit/posix/src/mutexinit.c | |
parent | posix: pthread_mutexattr_setprioceiling() (diff) | |
download | rtems-2df7fcff883856cd2fa8a56e9c509a0674bfb01a.tar.bz2 |
posix: _POSIX_Mutex_Default_attributes
Make _POSIX_Mutex_Default_attributes constant and independent of the
scheduler instance. Use INT_MAX to indicate the default ceiling
priority.
Diffstat (limited to 'cpukit/posix/src/mutexinit.c')
-rw-r--r-- | cpukit/posix/src/mutexinit.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/cpukit/posix/src/mutexinit.c b/cpukit/posix/src/mutexinit.c index 3459df77dd..0d4833ed90 100644 --- a/cpukit/posix/src/mutexinit.c +++ b/cpukit/posix/src/mutexinit.c @@ -36,6 +36,7 @@ int pthread_mutex_init( POSIX_Mutex_Control *the_mutex; const pthread_mutexattr_t *the_attr; POSIX_Mutex_Protocol protocol; + const Scheduler_Control *scheduler; Priority_Control priority; if ( attr ) the_attr = attr; @@ -105,11 +106,20 @@ int pthread_mutex_init( #endif if ( protocol == POSIX_MUTEX_PRIORITY_CEILING ) { - if ( !_POSIX_Priority_Is_valid( the_attr->prio_ceiling ) ) { + int prio_ceiling; + + scheduler = _Scheduler_Get_own( _Thread_Get_executing() ); + prio_ceiling = the_attr->prio_ceiling; + + if ( prio_ceiling == INT_MAX ) { + prio_ceiling = _POSIX_Priority_Get_maximum( scheduler ); + } + + if ( !_POSIX_Priority_Is_valid( prio_ceiling ) ) { return EINVAL; } - priority = _POSIX_Priority_To_core( the_attr->prio_ceiling ); + priority = _POSIX_Priority_To_core( prio_ceiling ); } the_mutex = _POSIX_Mutex_Allocate(); |