X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-tls.c;h=e8d66b66778d97aff390996f6bac5c9932730def;hb=3586d4e58a7a6f3df3e11b77990fa117cd8e8f51;hp=69026b2e6044f23fd310aad787966787b9bed22b;hpb=6b0fbaf3d2706392a6819793f10ea89f94aa5ed2;p=gnulib.git diff --git a/tests/test-tls.c b/tests/test-tls.c index 69026b2e6..e8d66b667 100644 --- a/tests/test-tls.c +++ b/tests/test-tls.c @@ -1,5 +1,5 @@ /* Test of thread-local storage in multithreaded situations. - Copyright (C) 2005, 2008 Free Software Foundation, Inc. + Copyright (C) 2005, 2008-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -75,6 +75,9 @@ perhaps_yield (void) yield (); } + +/* ----------------------- Test thread-local storage ----------------------- */ + #define KEYS_COUNT 4 static gl_tls_key_t mykeys[KEYS_COUNT]; @@ -91,10 +94,10 @@ worker_thread (void *arg) /* Initialize the per-thread storage. */ for (i = 0; i < KEYS_COUNT; i++) { - values[i] = (((unsigned int) rand() >> 3) % 1000000) * THREAD_COUNT + id; + values[i] = (((unsigned int) rand () >> 3) % 1000000) * THREAD_COUNT + id; /* Hopefully no arithmetic overflow. */ if ((values[i] % THREAD_COUNT) != id) - abort (); + abort (); } perhaps_yield (); @@ -121,16 +124,16 @@ worker_thread (void *arg) for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { dbgprintf ("Worker %p doing value swapping\n", gl_thread_self ()); - i = ((unsigned int) rand() >> 3) % KEYS_COUNT; - j = ((unsigned int) rand() >> 3) % KEYS_COUNT; + i = ((unsigned int) rand () >> 3) % KEYS_COUNT; + j = ((unsigned int) rand () >> 3) % KEYS_COUNT; if (i != j) - { - void *vi = gl_tls_get (mykeys[i]); - void *vj = gl_tls_get (mykeys[j]); + { + void *vi = gl_tls_get (mykeys[i]); + void *vj = gl_tls_get (mykeys[j]); - gl_tls_set (mykeys[i], vj); - gl_tls_set (mykeys[j], vi); - } + gl_tls_set (mykeys[i], vj); + gl_tls_set (mykeys[j], vi); + } perhaps_yield (); } @@ -146,7 +149,7 @@ worker_thread (void *arg) return NULL; } -void +static void test_tls (void) { int pass, i; @@ -156,25 +159,28 @@ test_tls (void) gl_thread_t threads[THREAD_COUNT]; if (pass == 0) - for (i = 0; i < KEYS_COUNT; i++) - gl_tls_key_init (mykeys[i], free); + for (i = 0; i < KEYS_COUNT; i++) + gl_tls_key_init (mykeys[i], free); else - for (i = KEYS_COUNT - 1; i >= 0; i--) - gl_tls_key_init (mykeys[i], free); + for (i = KEYS_COUNT - 1; i >= 0; i--) + gl_tls_key_init (mykeys[i], free); /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) - threads[i] = gl_thread_create (worker_thread, NULL); + threads[i] = gl_thread_create (worker_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) - gl_thread_join (threads[i], NULL); + gl_thread_join (threads[i], NULL); for (i = 0; i < KEYS_COUNT; i++) - gl_tls_key_destroy (mykeys[i]); + gl_tls_key_destroy (mykeys[i]); } } + +/* -------------------------------------------------------------------------- */ + int main () {