diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2011-11-06 13:25:27 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2011-11-06 13:25:27 +0100 |
commit | 8f34bd6d8695f68dfaeeb7a72c812db67aa90bbf (patch) | |
tree | f5293c830540b1444a68ad4c86ef172ba4c187bc /tests/test-17.c | |
parent | 873332500bcc7a705566d0338b117d3df86aac05 (diff) | |
parent | e4de8df465f6c984fc1ac337167499cca7700f63 (diff) |
Merge branch 'libpthread-moved' into upstream-merged
Diffstat (limited to 'tests/test-17.c')
-rw-r--r-- | tests/test-17.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/test-17.c b/tests/test-17.c new file mode 100644 index 00000000..a8bd1503 --- /dev/null +++ b/tests/test-17.c @@ -0,0 +1,57 @@ +/* Test that the key reuse inside libpthread does not cause thread + specific values to persist. */ + +#define _GNU_SOURCE 1 + +#include <pthread.h> +#include <stdio.h> +#include <assert.h> +#include <errno.h> + +void +work (int iter) +{ + error_t err; + pthread_key_t key1; + pthread_key_t key2; + void *value1; + void *value2; + + printf ("work/%d: start\n", iter); + err = pthread_key_create (&key1, NULL); + assert (err == 0); + err = pthread_key_create (&key2, NULL); + assert (err == 0); + + value1 = pthread_getspecific (key1); + value2 = pthread_getspecific (key2); + printf ("work/%d: pre-setspecific: %p,%p\n", iter, value1, value2); + assert (value1 == NULL); + assert (value2 == NULL); + err = pthread_setspecific (key1, (void *)(0x100 + iter)); + assert (err == 0); + err = pthread_setspecific (key2, (void *)(0x200 + iter)); + assert (err == 0); + + value1 = pthread_getspecific (key1); + value2 = pthread_getspecific (key2); + printf ("work/%d: post-setspecific: %p,%p\n", iter, value1, value2); + assert (value1 == (void *)(0x100 + iter)); + assert (value2 == (void *)(0x200 + iter)); + + err = pthread_key_delete (key1); + assert (err == 0); + err = pthread_key_delete (key2); + assert (err == 0); +} + +int +main (int argc, char *argv[]) +{ + int i; + + for (i = 0; i < 8; ++i) + work (i + 1); + + return 0; +} |