posix: Allow PTHREAD_PROCESS_SHARED for barriers

Close #3126.
This commit is contained in:
Sebastian Huber
2017-09-15 13:24:51 +02:00
parent 3b47ce73fa
commit 8230a329d3
3 changed files with 26 additions and 8 deletions

View File

@@ -25,6 +25,7 @@
#include <rtems/system.h> #include <rtems/system.h>
#include <rtems/posix/barrierimpl.h> #include <rtems/posix/barrierimpl.h>
#include <rtems/posix/posixapi.h>
/* /*
* pthread_barrier_init * pthread_barrier_init
@@ -78,12 +79,8 @@ int pthread_barrier_init(
if ( !the_attr->is_initialized ) if ( !the_attr->is_initialized )
return EINVAL; return EINVAL;
switch ( the_attr->process_shared ) { if ( !_POSIX_Is_valid_pshared( the_attr->process_shared ) ) {
case PTHREAD_PROCESS_PRIVATE: /* only supported values */ return EINVAL;
break;
case PTHREAD_PROCESS_SHARED:
default:
return EINVAL;
} }
/* /*

View File

@@ -1,4 +1,4 @@
*** POSIX BARRIER TEST 01 *** *** BEGIN OF TEST PSXBARRIER 1 ***
pthread_barrierattr_init( NULL ) -- EINVAL pthread_barrierattr_init( NULL ) -- EINVAL
pthread_barrierattr_setpshared( NULL, private ) -- EINVAL pthread_barrierattr_setpshared( NULL, private ) -- EINVAL
pthread_barrierattr_setpshared( NULL, shared ) -- EINVAL pthread_barrierattr_setpshared( NULL, shared ) -- EINVAL
@@ -19,6 +19,10 @@ pthread_barrier_init( NULL, NULL, 2 ) -- EINVAL
pthread_barrier_init( &barrier, &attr, 2 ) -- EINVAL pthread_barrier_init( &barrier, &attr, 2 ) -- EINVAL
pthread_barrierattr_init( &attr ) -- OK pthread_barrierattr_init( &attr ) -- OK
pthread_barrier_init( &barrier, &attr, 0 ) -- EINVAL pthread_barrier_init( &barrier, &attr, 0 ) -- EINVAL
pthread_barrier_init( &barrier, &attr, 1 ) -- EINVAL
pthread_barrierattr_setpshared( &attr, shared ) -- OK
pthread_barrier_init( &barrier, &attr, 1 ) -- OK
pthread_barrier_destroy( &barrier ) -- OK
pthread_barrier_init( &barrier, NULL, 1 ) -- OK pthread_barrier_init( &barrier, NULL, 1 ) -- OK
pthread_barrier_init( &barrier, NULL, 1 ) -- EAGAIN pthread_barrier_init( &barrier, NULL, 1 ) -- EAGAIN
pthread_barrier_destroy( &barrier ) -- OK pthread_barrier_destroy( &barrier ) -- OK
@@ -38,4 +42,4 @@ Init: pthread_create - thread 2 OK
pthread_barrier_wait( &Barrier ) for thread 0x0b010002 pthread_barrier_wait( &Barrier ) for thread 0x0b010002
pthread_barrier_wait - 0x0b010002 released pthread_barrier_wait - 0x0b010002 released
pthread_barrier_wait - 0x0b010001 released pthread_barrier_wait - 0x0b010001 released
*** END OF POSIX BARRIER TEST 01 *** *** END OF TEST PSXBARRIER 1 ***

View File

@@ -161,6 +161,23 @@ int main(
status = pthread_barrier_init( &barrier, &attr, 0 ); status = pthread_barrier_init( &barrier, &attr, 0 );
rtems_test_assert( status == EINVAL ); rtems_test_assert( status == EINVAL );
puts( "pthread_barrier_init( &barrier, &attr, 1 ) -- EINVAL" );
attr.process_shared = -1;
status = pthread_barrier_init( &barrier, &attr, 1 );
rtems_test_assert( status == EINVAL );
puts( "pthread_barrierattr_setpshared( &attr, shared ) -- OK" );
status = pthread_barrierattr_setpshared( &attr, PTHREAD_PROCESS_SHARED );
rtems_test_assert( status == 0 );
puts( "pthread_barrier_init( &barrier, &attr, 1 ) -- OK" );
status = pthread_barrier_init( &barrier, &attr, 1 );
rtems_test_assert( status == 0 );
puts( "pthread_barrier_destroy( &barrier ) -- OK" );
status = pthread_barrier_destroy( &barrier );
rtems_test_assert( status == 0 );
/* allocating too many */ /* allocating too many */
puts( "pthread_barrier_init( &barrier, NULL, 1 ) -- OK" ); puts( "pthread_barrier_init( &barrier, NULL, 1 ) -- OK" );
status = pthread_barrier_init( &barrier, NULL, 1 ); status = pthread_barrier_init( &barrier, NULL, 1 );