From 0dd262d33df323bc8ef53b8645500e36c1b6ab96 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 18 Jul 2013 09:42:46 +0200 Subject: libtests/gxx01: Avoid random memory read/write --- testsuites/libtests/gxx01/gxx01.scn | 10 +++------- testsuites/libtests/gxx01/init.c | 27 ++++++++++++--------------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/testsuites/libtests/gxx01/gxx01.scn b/testsuites/libtests/gxx01/gxx01.scn index 60cf16c582..5ffd49835f 100644 --- a/testsuites/libtests/gxx01/gxx01.scn +++ b/testsuites/libtests/gxx01/gxx01.scn @@ -25,12 +25,8 @@ rtems_gxx_key_create(&key, key_dtor) - OK rtems_gxx_setspecific() - OK rtems_gxx_getspecific(key) already existing - OK rtems_gxx_key_delete(key) - OK -rtems_gxx_getspecific(key_for_testing) non-existent - OK -rtems_gxx_key_delete(key_for_testing) - OK -rtems_gxx_key_dtor(&key) - OK +rtems_gxx_getspecific(key) non-existent - OK +rtems_gxx_key_delete(key) - OK +rtems_gxx_key_dtor(&key_obj) - OK -rtems_gxx_mutex_init() until exhausted and panic -rtems_gxx_mutex_init() panic AFTER printing EOF message -rtems_gxx_mutex_init *** END OF TEST GXX 01 *** -fatal error, exiting diff --git a/testsuites/libtests/gxx01/init.c b/testsuites/libtests/gxx01/init.c index 1b782feb25..eb46725175 100644 --- a/testsuites/libtests/gxx01/init.c +++ b/testsuites/libtests/gxx01/init.c @@ -116,7 +116,6 @@ void test_once(void) } volatile bool key_dtor_ran; -void *key_for_testing; void key_dtor(void *ptr) { @@ -128,6 +127,7 @@ void test_key(void) int sc; __gthread_key_t key; void *p; + __gthread_key key_obj; puts( "rtems_gxx_key_create(&key, NULL) - OK" ); sc = rtems_gxx_key_create(&key, NULL); @@ -154,25 +154,22 @@ void test_key(void) rtems_test_assert( sc == 0 ); rtems_test_assert( key_dtor_ran == true ); - puts( "rtems_gxx_getspecific(key_for_testing) non-existent - OK" ); - p = rtems_gxx_getspecific((__gthread_key_t) &key_for_testing); + key = calloc( 1, sizeof( *key ) ); + rtems_test_assert( key != NULL ); + + puts( "rtems_gxx_getspecific(key) non-existent - OK" ); + p = rtems_gxx_getspecific( key ); rtems_test_assert( p == NULL ); - rtems_test_assert( key_for_testing == NULL ); - key_for_testing = malloc(4); - rtems_test_assert( key_for_testing != NULL ); - - puts( "rtems_gxx_key_delete(key_for_testing) - OK" ); - sc = rtems_gxx_key_delete((__gthread_key_t) &key_for_testing); + puts( "rtems_gxx_key_delete(key) - OK" ); + sc = rtems_gxx_key_delete( key ); rtems_test_assert( sc == 0 ); - rtems_test_assert( key_for_testing == NULL ); - - key = (void *)0x1234; - puts( "rtems_gxx_key_dtor(&key) - OK" ); - sc = rtems_gxx_key_dtor((__gthread_key_t) &key, key_dtor); + memset( &key_obj, 0xff, sizeof( key_obj ) ); + puts( "rtems_gxx_key_dtor(&key_obj) - OK" ); + sc = rtems_gxx_key_dtor( &key_obj, key_dtor ); rtems_test_assert( sc == 0 ); - rtems_test_assert( key == NULL ); + rtems_test_assert( key_obj.val == 0 ); } rtems_task Init( -- cgit v1.2.3