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.

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

@@ -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.hu...@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
rtems-devel mailing list
rtems-devel@rtems.org
http://www.rtems.org/mailman/listinfo/rtems-devel

Reply via email to