[rtems commit] POSIX keys now enabled in all configurations.

Joel Sherrill Joel.Sherrill at OARcorp.com
Tue Mar 11 12:35:42 UTC 2014


On Mar 11, 2014 7:18 AM, Sebastian Huber <sebastian.huber at embedded-brains.de> wrote:
>
> On 2014-03-07 20:13, Joel Sherrill wrote:
> > diff --git a/testsuites/psxtests/psxkey07/init.c b/testsuites/psxtests/psxkey07/init.c
> > index e911dc7..b2aabb7 100644
> > --- a/testsuites/psxtests/psxkey07/init.c
> > +++ b/testsuites/psxtests/psxkey07/init.c
> > @@ -1,6 +1,6 @@
> >   /*
> >    *  Copyright (c) 2012 Zhongwei Yao.
> > - *  COPYRIGHT (c) 1989-2012.
> > + *  COPYRIGHT (c) 1989-2014.
> >    *  On-Line Applications Research Corporation (OAR).
> >    *
> >    *  The license and distribution terms for this file may be
> > @@ -19,8 +19,8 @@
> >   #include "pmacros.h"
> >
> >   /* forward declarations to avoid warnings */
> > -void *POSIX_Init(void *argument);
> > -void *Test_Thread(void *argument);
> > +rtems_task Init(rtems_task_argument argument);
> > +rtems_task Test_Thread(rtems_task_argument argument);
> >
> >   pthread_key_t Key;
> >   int created_thread_count, setted_thread_count, got_thread_count;
> > @@ -28,17 +28,15 @@ int all_thread_created;
> >   pthread_mutex_t mutex1, mutex2;
> >   pthread_cond_t create_condition_var, set_condition_var;
> >
> > -void *Test_Thread(
> > -  void *argument
> > -)
> > +rtems_task Test_Thread(rtems_task_argument argument)
> >   {
> >     int sc;
> >     int *value_p, *value_p2;
> >
> >     value_p = malloc( sizeof( int ) );
> > -  //printf( "Test_Thread%d  - Key pthread_setspecific - OK\n", (int)pthread_self() );
> >     sc = pthread_setspecific( Key, value_p );
> >     rtems_test_assert( !sc );
> > +
> >     pthread_mutex_lock( &mutex1 );
> >     ++setted_thread_count;
> >     pthread_cond_signal( &set_condition_var );
> > @@ -52,21 +50,20 @@ void *Test_Thread(
> >       pthread_cond_wait( &create_condition_var, &mutex2 );
> >     pthread_mutex_unlock( &mutex2 );
> >
> > -  //printf( "Test_Thread%d  - Key pthread_getspecific - OK\n", (int)pthread_self() );
> >     value_p2 = pthread_getspecific( Key );
> >     rtems_test_assert( value_p == value_p2 );
> >     ++got_thread_count;
> >
> > -  return NULL;
> > +  rtems_task_delete( RTEMS_SELF );
> >   }
> >
> > -void *POSIX_Init(
> > -  void *ignored
> > -)
> > +rtems_task Init(rtems_task_argument argument)
> >   {
> > -  pthread_t        *thread_p;
> > -  int              sc;
> > -  struct timespec  delay_request;
> > +  rtems_id          *thread_p;
> > +  rtems_status_code  rc;
> > +  int                sc;
> > +  struct timespec    delay_request;
> > +
> >     all_thread_created = 0;
> >
> >     puts( "\n\n*** TEST KEY 07 ***" );
> > @@ -74,12 +71,15 @@ void *POSIX_Init(
> >     puts( "Init - Mutex 1 create - OK" );
> >     sc = pthread_mutex_init( &mutex1, NULL );
> >     rtems_test_assert( !sc );
> > +
> >     puts( "Init - Mutex 2 create - OK" );
> >     sc = pthread_mutex_init( &mutex2, NULL );
> >     rtems_test_assert( !sc );
> > +
> >     puts( "Init - Condition variable 1 create - OK" );
> >     sc = pthread_cond_init( &create_condition_var, NULL );
> >     rtems_test_assert( !sc );
> > +
> >     puts( "Init - Condition variable 2 create - OK" );
> >     sc = pthread_cond_init( &set_condition_var, NULL );
> >     rtems_test_assert( !sc );
> > @@ -88,34 +88,54 @@ void *POSIX_Init(
> >     sc = pthread_key_create( &Key, NULL );
> >     rtems_test_assert( !sc );
> >
> > -  for( ; ; )
> > -    {
> > -      thread_p = malloc( sizeof( pthread_t ) );
> > -      rtems_test_assert( thread_p );
> > -      pthread_mutex_lock( &mutex1 );
> > -      sc = pthread_create( thread_p, NULL, Test_Thread, NULL );
> > -      rtems_test_assert( ( sc == 0 ) || ( sc == EAGAIN ) );
> > -      /**
> > -       * check if return is EAGAIN, it means RTEMS Workspace RAM
> > -       * have been exhausted.
> > -       */
> > -      if ( sc == EAGAIN )
> > -        {
> > -          pthread_mutex_unlock( &mutex1 );
> > -          break;
> > -        }
> > -      ++created_thread_count;
> > -      /**
> > -       * wait for test thread set key, the while loop here is used to
> > -       * avoid suprious wakeup.
> > -       */
> > -      while( created_thread_count > setted_thread_count )
> > -        pthread_cond_wait( &set_condition_var, &mutex1 );
> > +  for ( ; ; ) {
> > +    thread_p = malloc( sizeof( rtems_id ) );
> > +    rtems_test_assert( thread_p );
> > +    pthread_mutex_lock( &mutex1 );
> > +
> > +    rc = rtems_task_create(
> > +      rtems_build_name( 'T', 'E', 'S', 'T' ),
> > +      1,
> > +      RTEMS_MINIMUM_STACK_SIZE,
> > +      RTEMS_DEFAULT_MODES,
> > +      RTEMS_DEFAULT_ATTRIBUTES,
> > +      thread_p
> > +    );
> > +    rtems_test_assert(
> > +      ( rc == RTEMS_SUCCESSFUL ) || ( rc == RTEMS_UNSATISFIED )
> > +    );
> > +
> > +    if ( rc == RTEMS_SUCCESSFUL ) {
> > +      rc = rtems_task_start( *thread_p, Test_Thread, 0 );
> > +      rtems_test_assert( rc == RTEMS_SUCCESSFUL );
> > +    }
> > +
> > +    /**
> > +     * check if return is EAGAIN, it means RTEMS Workspace RAM
> > +     * have been exhausted.
> > +     */
> > +    if ( rc == RTEMS_UNSATISFIED ) {
> >         pthread_mutex_unlock( &mutex1 );
> > +      break;
> >       }
> > -  printf( "Init - %d pthreads have been created - OK\n", created_thread_count );
> > -  printf( "Init - %d pthreads have been setted key data - OK\n", setted_thread_count );
> > +    ++created_thread_count;
> > +
> > +    /**
> > +     * wait for test thread set key, the while loop here is used to
> > +     * avoid suprious wakeup.
> > +     */
> > +    while( created_thread_count > setted_thread_count )
> > +      pthread_cond_wait( &set_condition_var, &mutex1 );
> > +    pthread_mutex_unlock( &mutex1 );
> > +  }
> > +  printf(
> > +    "Init - %d pthreads have been created - OK\n"
> > +    "Init - %d pthreads have been setted key data - OK\n",
> > +    created_thread_count,
> > +    setted_thread_count
> > +  );
> >     rtems_test_assert( created_thread_count == setted_thread_count );
>
> Why did you convert this test to Classic API tasks?  It uses POSIX condition
> variables and mutexes.  I would change it back.

If this test serves any useful purpose for covering POSIX key code, then it must be building and executable when POSIX threads are disabled.

Thus if we are to fully test keys with POSIX disabled, all key tests had to become Classic API tests.

> The following patch is necessary if we want to keep the current version:

Ok. Commit it.

> @@ -104,6 +116,7 @@ rtems_task Init(rtems_task_argument argument)
>       );
>       rtems_test_assert(
>         ( rc == RTEMS_SUCCESSFUL ) || ( rc == RTEMS_UNSATISFIED )
> +        || ( rc == RTEMS_TOO_MANY )
>       );
>
>       if ( rc == RTEMS_SUCCESSFUL ) {
> @@ -112,10 +125,10 @@ rtems_task Init(rtems_task_argument argument)
>       }
>
>       /**
> -     * check if return is EAGAIN, it means RTEMS Workspace RAM
> +     * check if return is not successful, it means RTEMS Workspace RAM
>        * have been exhausted.
>        */
> -    if ( rc == RTEMS_UNSATISFIED ) {
> +    if ( rc != RTEMS_SUCCESSFUL ) {
>         pthread_mutex_unlock( &mutex1 );
>         break;
>       }
>
>
> --
> Sebastian Huber, embedded brains GmbH
>
> Address : Dornierstr. 4, D-82178 Puchheim, Germany
> Phone   : +49 89 189 47 41-16
> Fax     : +49 89 189 47 41-09
> E-Mail  : sebastian.huber at embedded-brains.de
> PGP     : Public key available on request.
>
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20140311/ff92b62f/attachment-0001.html>


More information about the devel mailing list