summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/ChangeLog5
-rw-r--r--tests/tsd1.c48
2 files changed, 52 insertions, 1 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 081218f..074d5c4 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,7 @@
+Mon Oct 12 02:12:29 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
+
+ * tsd1.c: New. Test TSD using 1 key and 2 threads.
+
1998-09-13 Ben Elliston <bje@cygnus.com>
* eyal1.c: New file; contributed by Eyal Lebedinsky
@@ -17,4 +21,3 @@
* exit2.c: New file; test pthread_exit() harder.
* exit1.c: New file; test pthread_exit().
-
diff --git a/tests/tsd1.c b/tests/tsd1.c
new file mode 100644
index 0000000..cb105ae
--- /dev/null
+++ b/tests/tsd1.c
@@ -0,0 +1,48 @@
+#include <pthread.h>
+#include <stdio.h>
+
+pthread_key_t key;
+pthread_once_t key_once = PTHREAD_ONCE_INIT;
+
+void
+make_key(void)
+{
+ (void) pthread_key_create(&key, free);
+}
+
+void *
+mythread(void * arg)
+{
+ void *ptr;
+
+ (void) pthread_once(&key_once, make_key);
+ if ((ptr = pthread_getspecific(key)) == NULL)
+ {
+ ptr = malloc(80);
+ sprintf(ptr, "Thread %d\n", (int) arg);
+ (void) pthread_setspecific(key, ptr);
+ }
+
+ if (pthread_getspecific(key) == NULL)
+ printf((char *) pthread_getspecific(key));
+ else
+ printf("Failed %d\n", (int) arg);
+
+ return 0;
+}
+
+int
+main()
+{
+ int rc;
+ pthread_t t1, t2;
+
+ rc = pthread_create(&t1, NULL, mythread, 1);
+ printf("pthread_create returned %d\n", rc);
+
+ rc = pthread_create(&t2, NULL, mythread, 2);
+ printf("pthread_create returned %d\n", rc);
+
+ Sleep(2000);
+ return 0;
+}