bug-gnulib
[Top][All Lists]
Advanced

[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:51:26 +0200
User-agent: KMail/1.5.4

Yoann Vandoorselaere wrote:
> > - 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.

Yes, I'm applying nearly exactly your patch.


2008-09-30  Yoann Vandoorselaere  <address@hidden>
            Bruno Haible  <address@hidden>

        * 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.

*** modules/tls-tests.orig      2008-10-01 02:46:49.000000000 +0200
--- modules/tls-tests   2008-09-27 17:04:06.000000000 +0200
***************
*** 2,22 ****
  tests/test-tls.c
  
  Depends-on:
  
  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@
  
--- 2,14 ----
  tests/test-tls.c
  
  Depends-on:
+ thread
+ yield
  
  configure.ac:
  
  Makefile.am:
  TESTS += test-tls
  check_PROGRAMS += test-tls
! test_tls_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@
  
*** tests/test-tls.c.orig       2008-10-01 02:46:50.000000000 +0200
--- tests/test-tls.c    2008-09-27 17:05:05.000000000 +0200
***************
*** 51,56 ****
--- 51,58 ----
  #include <string.h>
  
  #include "glthread/tls.h"
+ #include "glthread/thread.h"
+ #include "glthread/yield.h"
  
  #if ENABLE_DEBUGGING
  # define dbgprintf printf
***************
*** 58,185 ****
  # 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
--- 60,65 ----
***************
*** 288,294 ****
  
        /* Wait for the threads to terminate.  */
        for (i = 0; i < THREAD_COUNT; i++)
!       gl_thread_join (threads[i]);
  
        for (i = 0; i < KEYS_COUNT; i++)
        gl_tls_key_destroy (mykeys[i]);
--- 168,174 ----
  
        /* Wait for the threads to terminate.  */
        for (i = 0; i < THREAD_COUNT; i++)
!       gl_thread_join (threads[i], NULL);
  
        for (i = 0; i < KEYS_COUNT; i++)
        gl_tls_key_destroy (mykeys[i]);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]