Yoann Vandoorselaere wrote on 2008-09-15: > > - Make 'lock-tests' and 'tls-tests' depend on the thread and yield > > module, use YIELD_LIBS in place of the deprecated LIBSCHED variable, and > > update 'lock-tests.c' and 'tls-tests.c' to use newer glthread API.
Nearly right. Only the USE_*_THREADS could be defined incorrectly. I've committed this for 'test-lock.c': 2008-09-30 Yoann Vandoorselaere <[EMAIL PROTECTED]> Bruno Haible <[EMAIL PROTECTED]> * modules/lock-tests (Depends-on): Add thread, yield. (configure.ac): Remove all checks. (test_lock_LDADD): Use YIELD_LIB instead of LIBSCHED. * tests/test-lock.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_lock, test_rwlock, test_recursive_lock, test_once): Pass an additional NULL argument to gl_thread_join. *** modules/lock-tests.orig 2008-10-01 02:31:47.000000000 +0200 --- modules/lock-tests 2008-09-27 17:04:06.000000000 +0200 *************** *** 2,21 **** tests/test-lock.c Depends-on: configure.ac: - dnl Checks for special libraries for the tests/test-lock 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-lock check_PROGRAMS += test-lock ! test_lock_LDADD = $(LDADD) @LIBMULTITHREAD@ @LIBSCHED@ --- 2,13 ---- tests/test-lock.c Depends-on: + thread + yield configure.ac: Makefile.am: TESTS += test-lock check_PROGRAMS += test-lock ! test_lock_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ *** tests/test-lock.c.orig 2008-10-01 02:31:47.000000000 +0200 --- tests/test-lock.c 2008-09-27 17:05:36.000000000 +0200 *************** *** 73,206 **** #endif #include "glthread/lock.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # 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 --- 73,102 ---- #endif #include "glthread/lock.h" + #if !ENABLE_LOCKING + # if TEST_POSIX_THREADS + # define USE_POSIX_THREADS 1 + # endif + # if TEST_SOLARIS_THREADS + # define USE_SOLARIS_THREADS 1 + # endif + # if TEST_PTH_THREADS + # define USE_PTH_THREADS 1 + # endif + # if TEST_WIN32_THREADS + # define USE_WIN32_THREADS 1 + # endif + #endif + + #include "glthread/thread.h" + #include "glthread/yield.h" + #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() gl_thread_yield () #else *************** *** 310,318 **** /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ! gl_thread_join (threads[i]); lock_checker_done = 1; ! gl_thread_join (checkerthread); check_accounts (); } --- 206,214 ---- /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ! gl_thread_join (threads[i], NULL); lock_checker_done = 1; ! gl_thread_join (checkerthread, NULL); check_accounts (); } *************** *** 392,401 **** /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ! gl_thread_join (threads[i]); rwlock_checker_done = 1; for (i = 0; i < THREAD_COUNT; i++) ! gl_thread_join (checkerthreads[i]); check_accounts (); } --- 288,297 ---- /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ! gl_thread_join (threads[i], NULL); rwlock_checker_done = 1; for (i = 0; i < THREAD_COUNT; i++) ! gl_thread_join (checkerthreads[i], NULL); check_accounts (); } *************** *** 490,498 **** /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ! gl_thread_join (threads[i]); reclock_checker_done = 1; ! gl_thread_join (checkerthread); check_accounts (); } --- 386,394 ---- /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ! gl_thread_join (threads[i], NULL); reclock_checker_done = 1; ! gl_thread_join (checkerthread, NULL); check_accounts (); } *************** *** 639,645 **** /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ! gl_thread_join (threads[i]); } int --- 535,541 ---- /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) ! gl_thread_join (threads[i], NULL); } int