diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-07-30 20:21:41 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-07-30 20:21:41 +0000 |
commit | 64bad68bc811039e246e0565ca7ddfc4ed5a9528 (patch) | |
tree | 98c691310e926f697b6ab1c112b6e9c09aae106f /testsuites/psxtests/psxkey03/init.c | |
parent | 2009-07-30 Joel Sherrill <joel.sherrill@OARcorp.com> (diff) | |
download | rtems-64bad68bc811039e246e0565ca7ddfc4ed5a9528.tar.bz2 |
2009-07-30 Joel Sherrill <joel.sherrill@OARcorp.com>
* Makefile.am, configure.ac: Add new test to account for properly
handling keys when a thread has non-NULL key value and key has NULL
destructor and when a thread has NULL key value and key has
destructor.
* psxkey03/.cvsignore, psxkey03/Makefile.am, psxkey03/init.c,
psxkey03/psxkey03.doc, psxkey03/psxkey03.scn: New files.
Diffstat (limited to '')
-rw-r--r-- | testsuites/psxtests/psxkey03/init.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/testsuites/psxtests/psxkey03/init.c b/testsuites/psxtests/psxkey03/init.c new file mode 100644 index 0000000000..4de2bb353f --- /dev/null +++ b/testsuites/psxtests/psxkey03/init.c @@ -0,0 +1,106 @@ +/* + * COPYRIGHT (c) 1989-2009. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#include <pthread.h> +#include <errno.h> +#include "tmacros.h" +#include "pmacros.h" + +pthread_key_t Key; +volatile bool destructor_ran; + +void destructor(void *value) +{ + destructor_ran = true; +} + +void *Test_Thread( + void *key_value +) +{ + int sc; + + puts( "Test_Thread - pthread_setspecific - OK" ); + sc = pthread_setspecific( Key, key_value ); + assert( !sc ); + + puts( "Test_Thread - pthread_exit to run key destructors - OK" ); + return NULL; +} + +void *POSIX_Init( + void *ignored +) +{ + pthread_t thread; + int sc; + bool sb; + + puts( "\n\n*** TEST KEY 03 ***" ); + + /* + * Key with NULL destructor + */ + puts( "Init - pthread_key_create with NULL destructor - OK" ); + sc = pthread_key_create( &Key, NULL ); + assert( !sc ); + + puts( "Init - pthread_create - OK" ); + sc = pthread_create( &thread, NULL, Test_Thread, &sc ); + assert( !sc ); + + puts( "Init - sleep - let thread run - OK" ); + usleep(500000); + + puts( "Init - pthread_key_delete - OK" ); + sc = pthread_key_delete( Key ); + assert( sc == 0 ); + + /* + * Key with non-NULL destructor + */ + destructor_ran = false; + puts( "Init - pthread_key_create with non-NULL destructor - OK" ); + sc = pthread_key_create( &Key, destructor ); + assert( !sc ); + + puts( "Init - pthread_create - OK" ); + sc = pthread_create( &thread, NULL, Test_Thread, NULL ); + assert( !sc ); + + puts( "Init - sleep - let thread run - OK" ); + usleep(500000); + + puts( "Init - verify destructor did NOT ran" ); + assert( destructor_ran == false ); + + puts( "Init - pthread_key_delete - OK" ); + sc = pthread_key_delete( Key ); + assert( sc == 0 ); + + puts( "*** END OF TEST KEY 03 ***" ); + rtems_test_exit(0); +} + +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_POSIX_THREADS 2 +#define CONFIGURE_MAXIMUM_POSIX_KEYS 1 + +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> + +/* global variables */ |