[rtems commit] posix: Allow PTHREAD_PROCESS_SHARED for barriers

Sebastian Huber sebh at rtems.org
Mon Sep 18 05:00:19 UTC 2017


Module:    rtems
Branch:    master
Commit:    8230a329d34b2298d80817e900c3bde2cdcbdea0
Changeset: http://git.rtems.org/rtems/commit/?id=8230a329d34b2298d80817e900c3bde2cdcbdea0

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Sep 15 13:24:51 2017 +0200

posix: Allow PTHREAD_PROCESS_SHARED for barriers

Close #3126.

---

 cpukit/posix/src/pbarrierinit.c                   |  9 +++------
 testsuites/psxtests/psxbarrier01/psxbarrier01.scn |  8 ++++++--
 testsuites/psxtests/psxbarrier01/test.c           | 17 +++++++++++++++++
 3 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/cpukit/posix/src/pbarrierinit.c b/cpukit/posix/src/pbarrierinit.c
index 9560856..c14cc0c 100644
--- a/cpukit/posix/src/pbarrierinit.c
+++ b/cpukit/posix/src/pbarrierinit.c
@@ -25,6 +25,7 @@
 
 #include <rtems/system.h>
 #include <rtems/posix/barrierimpl.h>
+#include <rtems/posix/posixapi.h>
 
 /*
  *  pthread_barrier_init
@@ -78,12 +79,8 @@ int pthread_barrier_init(
   if ( !the_attr->is_initialized )
     return EINVAL;
 
-  switch ( the_attr->process_shared ) {
-    case PTHREAD_PROCESS_PRIVATE:    /* only supported values */
-      break;
-    case PTHREAD_PROCESS_SHARED:
-    default:
-      return EINVAL;
+  if ( !_POSIX_Is_valid_pshared( the_attr->process_shared ) ) {
+    return EINVAL;
   }
 
   /*
diff --git a/testsuites/psxtests/psxbarrier01/psxbarrier01.scn b/testsuites/psxtests/psxbarrier01/psxbarrier01.scn
index 6b71411..d568d8d 100644
--- a/testsuites/psxtests/psxbarrier01/psxbarrier01.scn
+++ b/testsuites/psxtests/psxbarrier01/psxbarrier01.scn
@@ -1,4 +1,4 @@
-*** POSIX BARRIER TEST 01 ***
+*** BEGIN OF TEST PSXBARRIER 1 ***
 pthread_barrierattr_init( NULL ) -- EINVAL
 pthread_barrierattr_setpshared( NULL, private ) -- 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_barrierattr_init( &attr ) -- OK
 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 ) -- EAGAIN
 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 - 0x0b010002 released
 pthread_barrier_wait - 0x0b010001 released
-*** END OF POSIX BARRIER TEST 01 ***
+*** END OF TEST PSXBARRIER 1 ***
diff --git a/testsuites/psxtests/psxbarrier01/test.c b/testsuites/psxtests/psxbarrier01/test.c
index bcbb87a..16e8665 100644
--- a/testsuites/psxtests/psxbarrier01/test.c
+++ b/testsuites/psxtests/psxbarrier01/test.c
@@ -161,6 +161,23 @@ int main(
   status = pthread_barrier_init( &barrier, &attr, 0 );
   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 */
   puts( "pthread_barrier_init( &barrier, NULL, 1 ) -- OK" );
   status = pthread_barrier_init( &barrier, NULL, 1 );




More information about the vc mailing list