From 3b47ce73fa67efaeb1c92dc0129efa92f22d747c Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 15 Sep 2017 13:14:57 +0200 Subject: posix: Allow PTHREAD_PROCESS_SHARED for mutexes Close #3125. --- cpukit/posix/include/rtems/posix/posixapi.h | 15 +++++++++++++++ cpukit/posix/src/mutexinit.c | 10 +++------- 2 files changed, 18 insertions(+), 7 deletions(-) (limited to 'cpukit/posix') diff --git a/cpukit/posix/include/rtems/posix/posixapi.h b/cpukit/posix/include/rtems/posix/posixapi.h index 1a64cf7a1d..2441a2ee6f 100644 --- a/cpukit/posix/include/rtems/posix/posixapi.h +++ b/cpukit/posix/include/rtems/posix/posixapi.h @@ -26,6 +26,8 @@ #include #include +#include + /** * @defgroup POSIXAPI RTEMS POSIX API * @@ -125,6 +127,19 @@ RTEMS_INLINE_ROUTINE int _POSIX_Zero_or_minus_one_plus_errno( } \ return (type *) the_object +/* + * See also The Open Group Base Specifications Issue 7, IEEE Std 1003.1-2008, + * 2016 Edition, subsection 2.9.9, Synchronization Object Copies and + * Alternative Mappings. + * + * http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09_09 + */ +RTEMS_INLINE_ROUTINE bool _POSIX_Is_valid_pshared( int pshared ) +{ + return pshared == PTHREAD_PROCESS_PRIVATE || + pshared == PTHREAD_PROCESS_SHARED; +} + /** @} */ #endif diff --git a/cpukit/posix/src/mutexinit.c b/cpukit/posix/src/mutexinit.c index 08acb539b5..c7161b0daf 100644 --- a/cpukit/posix/src/mutexinit.c +++ b/cpukit/posix/src/mutexinit.c @@ -19,6 +19,7 @@ #endif #include +#include #include #include @@ -62,14 +63,9 @@ int pthread_mutex_init( if ( !the_attr->is_initialized ) return EINVAL; - /* - * We only support process private mutexes. - */ - if ( the_attr->process_shared == PTHREAD_PROCESS_SHARED ) - return ENOSYS; - - if ( the_attr->process_shared != PTHREAD_PROCESS_PRIVATE ) + if ( !_POSIX_Is_valid_pshared( the_attr->process_shared ) ) { return EINVAL; + } /* * Determine the discipline of the mutex -- cgit v1.2.3