summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2008-10-01 02:49:47 +0200
committerBruno Haible <bruno@clisp.org>2008-10-01 02:49:47 +0200
commit6b0fbaf3d2706392a6819793f10ea89f94aa5ed2 (patch)
treef9d570dd79350dd59beac8cd139c0d598ee5188b
parent37fbb99a4f87872c294fadfd2b91a0a2bb6a539c (diff)
downloadgnulib-6b0fbaf3d2706392a6819793f10ea89f94aa5ed2.tar.gz
Make use of the modules 'thread', 'yield' in the 'tls' test.
-rw-r--r--ChangeLog11
-rw-r--r--modules/tls-tests14
-rw-r--r--tests/test-tls.c126
3 files changed, 17 insertions, 134 deletions
diff --git a/ChangeLog b/ChangeLog
index a38a2282b3..d739d3a250 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,17 @@
2008-09-30 Yoann Vandoorselaere <yoann.v@prelude-ids.com>
Bruno Haible <bruno@clisp.org>
+ * modules/tls-tests (Depends-on): Add thread, yield.
+ (configure.ac): Remove all checks.
+ (test_tls_LDADD): Use YIELD_LIB instead of LIBSCHED.
+ * tests/test-tls.c (gl_thread_t, gl_thread_join, gl_thread_yield,
+ gl_thread_self): Remove definitions. Include glthread/thread.h and
+ glthread/yield.h instead.
+ (test_tls): Pass an additional NULL argument to gl_thread_join.
+
+2008-09-30 Yoann Vandoorselaere <yoann.v@prelude-ids.com>
+ Bruno Haible <bruno@clisp.org>
+
* modules/lock-tests (Depends-on): Add thread, yield.
(configure.ac): Remove all checks.
(test_lock_LDADD): Use YIELD_LIB instead of LIBSCHED.
diff --git a/modules/tls-tests b/modules/tls-tests
index b9f5a23131..107cfe45f6 100644
--- a/modules/tls-tests
+++ b/modules/tls-tests
@@ -2,21 +2,13 @@ Files:
tests/test-tls.c
Depends-on:
+thread
+yield
configure.ac:
-dnl Checks for special libraries for the tests/test-tls test.
-dnl On some systems, sched_yield is in librt, rather than in libpthread.
-LIBSCHED=
-if test $gl_threads_api = posix; then
- dnl Solaris has sched_yield in librt, not in libpthread or libc.
- AC_CHECK_LIB(rt, sched_yield, [LIBSCHED=-lrt],
- [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt.
- AC_CHECK_LIB(posix4, sched_yield, [LIBSCHED=-lposix4])])
-fi
-AC_SUBST([LIBSCHED])
Makefile.am:
TESTS += test-tls
check_PROGRAMS += test-tls
-test_tls_LDADD = $(LDADD) @LIBMULTITHREAD@ @LIBSCHED@
+test_tls_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@
diff --git a/tests/test-tls.c b/tests/test-tls.c
index c612ba8a9b..69026b2e60 100644
--- a/tests/test-tls.c
+++ b/tests/test-tls.c
@@ -51,6 +51,8 @@
#include <string.h>
#include "glthread/tls.h"
+#include "glthread/thread.h"
+#include "glthread/yield.h"
#if ENABLE_DEBUGGING
# define dbgprintf printf
@@ -58,128 +60,6 @@
# define dbgprintf if (0) printf
#endif
-#if TEST_POSIX_THREADS
-# include <pthread.h>
-# include <sched.h>
-typedef pthread_t gl_thread_t;
-static inline gl_thread_t gl_thread_create (void * (*func) (void *), void *arg)
-{
- pthread_t thread;
- if (pthread_create (&thread, NULL, func, arg) != 0)
- abort ();
- return thread;
-}
-static inline void gl_thread_join (gl_thread_t thread)
-{
- void *retval;
- if (pthread_join (thread, &retval) != 0)
- abort ();
-}
-static inline void gl_thread_yield (void)
-{
- sched_yield ();
-}
-static inline void * gl_thread_self (void)
-{
- return (void *) pthread_self ();
-}
-#endif
-#if TEST_PTH_THREADS
-# include <pth.h>
-typedef pth_t gl_thread_t;
-static inline gl_thread_t gl_thread_create (void * (*func) (void *), void *arg)
-{
- pth_t thread = pth_spawn (NULL, func, arg);
- if (thread == NULL)
- abort ();
- return thread;
-}
-static inline void gl_thread_join (gl_thread_t thread)
-{
- if (!pth_join (thread, NULL))
- abort ();
-}
-static inline void gl_thread_yield (void)
-{
- pth_yield (NULL);
-}
-static inline void * gl_thread_self (void)
-{
- return pth_self ();
-}
-#endif
-#if TEST_SOLARIS_THREADS
-# include <thread.h>
-typedef thread_t gl_thread_t;
-static inline gl_thread_t gl_thread_create (void * (*func) (void *), void *arg)
-{
- thread_t thread;
- if (thr_create (NULL, 0, func, arg, 0, &thread) != 0)
- abort ();
- return thread;
-}
-static inline void gl_thread_join (gl_thread_t thread)
-{
- void *retval;
- if (thr_join (thread, NULL, &retval) != 0)
- abort ();
-}
-static inline void gl_thread_yield (void)
-{
- thr_yield ();
-}
-static inline void * gl_thread_self (void)
-{
- return (void *) thr_self ();
-}
-#endif
-#if TEST_WIN32_THREADS
-# include <windows.h>
-typedef HANDLE gl_thread_t;
-/* Use a wrapper function, instead of adding WINAPI through a cast. */
-struct wrapper_args { void * (*func) (void *); void *arg; };
-static DWORD WINAPI wrapper_func (void *varg)
-{
- struct wrapper_args *warg = (struct wrapper_args *)varg;
- void * (*func) (void *) = warg->func;
- void *arg = warg->arg;
- free (warg);
- func (arg);
- return 0;
-}
-static inline gl_thread_t gl_thread_create (void * (*func) (void *), void *arg)
-{
- struct wrapper_args *warg =
- (struct wrapper_args *) malloc (sizeof (struct wrapper_args));
- if (warg == NULL)
- abort ();
- warg->func = func;
- warg->arg = arg;
- {
- DWORD thread_id;
- HANDLE thread =
- CreateThread (NULL, 100000, wrapper_func, warg, 0, &thread_id);
- if (thread == NULL)
- abort ();
- return thread;
- }
-}
-static inline void gl_thread_join (gl_thread_t thread)
-{
- if (WaitForSingleObject (thread, INFINITE) == WAIT_FAILED)
- abort ();
- if (!CloseHandle (thread))
- abort ();
-}
-static inline void gl_thread_yield (void)
-{
- Sleep (0);
-}
-static inline void * gl_thread_self (void)
-{
- return (void *) GetCurrentThreadId ();
-}
-#endif
#if EXPLICIT_YIELD
# define yield() gl_thread_yield ()
#else
@@ -288,7 +168,7 @@ test_tls (void)
/* Wait for the threads to terminate. */
for (i = 0; i < THREAD_COUNT; i++)
- gl_thread_join (threads[i]);
+ gl_thread_join (threads[i], NULL);
for (i = 0; i < KEYS_COUNT; i++)
gl_tls_key_destroy (mykeys[i]);