From e0b68aae21da8697ef0f4f3924ea29edb0e89582 Mon Sep 17 00:00:00 2001 From: rpj Date: Thu, 29 Oct 1998 20:58:36 +0000 Subject: Fri Oct 30 15:15:50 1998 Ross Johnson * cleanup.c (_pthread_handler_push): Fixed bug appending new handler to list reported by Peter Slacik . (new_thread): Rename poorly named local variable to "new_handler". --- tests/tsd1.c | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) (limited to 'tests/tsd1.c') diff --git a/tests/tsd1.c b/tests/tsd1.c index 06ffab5..aa2d3da 100644 --- a/tests/tsd1.c +++ b/tests/tsd1.c @@ -4,10 +4,22 @@ pthread_key_t key; pthread_once_t key_once = PTHREAD_ONCE_INIT; +void +destroy_key(void * arg) +{ + /* arg is not NULL if we get to here. */ + printf("SUCCESS: %s: destroying key.\n", (char *) arg); + + free((char *) arg); + + /* Is it our responsibility to do this? */ + arg = NULL; +} + void make_key(void) { - if (pthread_key_create(&key, free) != 0) + if (pthread_key_create(&key, destroy_key) != 0) { printf("Key create failed\n"); exit(1); @@ -31,18 +43,31 @@ mythread(void * arg) else { ptr = (void *) malloc(80); - sprintf((char *) ptr, "Thread %d Key 0x%x succeeded\n", + sprintf((char *) ptr, "Thread %d Key 0x%x", (int) arg, (int) key); (void) pthread_setspecific(key, ptr); } - if ((ptr = pthread_getspecific(key)) != NULL) - printf((char *) ptr); + if ((ptr = pthread_getspecific(key)) == NULL) + { + printf("FAILED: Thread %d Key 0x%x: key value set or get failed.\n", + (int) arg, + (int) key); + exit(1); + } else - printf("Failed %d\n", (int) arg); + { + printf("SUCCESS: Thread %d Key 0x%x: key value set and get succeeded.\n", + (int) arg, + (int) key); + + printf("SUCCESS: %s: exiting thread.\n", (char *) ptr); + } return 0; + + /* Exiting the thread will call the key destructor. */ } int -- cgit v1.2.3