/* Test of thread-local storage in multithreaded situations.
- Copyright (C) 2005, 2008, 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2008-2013 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
#include <config.h>
-#if USE_POSIX_THREADS || USE_SOLARIS_THREADS || USE_PTH_THREADS || USE_WIN32_THREADS
+#if USE_POSIX_THREADS || USE_SOLARIS_THREADS || USE_PTH_THREADS || USE_WINDOWS_THREADS
#if USE_POSIX_THREADS
# define TEST_POSIX_THREADS 1
#if USE_PTH_THREADS
# define TEST_PTH_THREADS 1
#endif
-#if USE_WIN32_THREADS
-# define TEST_WIN32_THREADS 1
+#if USE_WINDOWS_THREADS
+# define TEST_WINDOWS_THREADS 1
#endif
/* Whether to help the scheduler through explicit yield().
# define yield()
#endif
-static inline void
+static void
perhaps_yield (void)
{
/* Call yield () only with a certain probability, otherwise with GNU Pth
int i, j, repeat;
unsigned int values[KEYS_COUNT];
- dbgprintf ("Worker %p started\n", gl_thread_self ());
+ dbgprintf ("Worker %p started\n", gl_thread_self_pointer ());
/* 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 ();
perhaps_yield ();
/* Verify that the initial value is NULL. */
- dbgprintf ("Worker %p before initial verify\n", gl_thread_self ());
+ dbgprintf ("Worker %p before initial verify\n", gl_thread_self_pointer ());
for (i = 0; i < KEYS_COUNT; i++)
if (gl_tls_get (mykeys[i]) != NULL)
abort ();
- dbgprintf ("Worker %p after initial verify\n", gl_thread_self ());
+ dbgprintf ("Worker %p after initial verify\n", gl_thread_self_pointer ());
perhaps_yield ();
/* Initialize the per-thread storage. */
- dbgprintf ("Worker %p before first tls_set\n", gl_thread_self ());
+ dbgprintf ("Worker %p before first tls_set\n", gl_thread_self_pointer ());
for (i = 0; i < KEYS_COUNT; i++)
{
unsigned int *ptr = (unsigned int *) malloc (sizeof (unsigned int));
*ptr = values[i];
gl_tls_set (mykeys[i], ptr);
}
- dbgprintf ("Worker %p after first tls_set\n", gl_thread_self ());
+ dbgprintf ("Worker %p after first tls_set\n", gl_thread_self_pointer ());
perhaps_yield ();
/* Shuffle around the pointers. */
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;
+ dbgprintf ("Worker %p doing value swapping\n", gl_thread_self_pointer ());
+ i = ((unsigned int) rand () >> 3) % KEYS_COUNT;
+ j = ((unsigned int) rand () >> 3) % KEYS_COUNT;
if (i != j)
{
void *vi = gl_tls_get (mykeys[i]);
}
/* Verify that all the values are from this thread. */
- dbgprintf ("Worker %p before final verify\n", gl_thread_self ());
+ dbgprintf ("Worker %p before final verify\n", gl_thread_self_pointer ());
for (i = 0; i < KEYS_COUNT; i++)
if ((*(unsigned int *) gl_tls_get (mykeys[i]) % THREAD_COUNT) != id)
abort ();
- dbgprintf ("Worker %p after final verify\n", gl_thread_self ());
+ dbgprintf ("Worker %p after final verify\n", gl_thread_self_pointer ());
perhaps_yield ();
- dbgprintf ("Worker %p dying.\n", gl_thread_self ());
+ dbgprintf ("Worker %p dying.\n", gl_thread_self_pointer ());
return NULL;
}