[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH]: update tls and lock tests to use newer glthread API
From: |
Bruno Haible |
Subject: |
Re: [PATCH]: update tls and lock tests to use newer glthread API |
Date: |
Wed, 1 Oct 2008 02:43:26 +0200 |
User-agent: |
KMail/1.5.4 |
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 <address@hidden>
Bruno Haible <address@hidden>
* 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
- [PATCH]: update tls and lock tests to use newer glthread API, Yoann Vandoorselaere, 2008/09/14
- Re: [PATCH]: update tls and lock tests to use newer glthread API, Yoann Vandoorselaere, 2008/09/15
- Re: [PATCH]: update tls and lock tests, gl_cond_t WIN32 implementation, Yoann Vandoorselaere, 2008/09/18
- Re: [PATCH]: update tls and lock tests to use newer glthread API, Bruno Haible, 2008/09/30
- Re: [PATCH]: update tls and lock tests to use newer glthread API,
Bruno Haible <=
- Re: [PATCH]: update tls and lock tests to use newer glthread API, Bruno Haible, 2008/09/30
- Re: [PATCH]: update tls and lock tests to use newer glthread API, Bruno Haible, 2008/09/30