diff --git a/src/acconfig.h b/src/acconfig.h index 4be7110f6bafe1f7ff2f8a8468b0f05431fb3673..b8973355a7a2b13ef1d2502b38d48a4c0b470768 100644 --- a/src/acconfig.h +++ b/src/acconfig.h @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: acconfig.h,v 1.109 2002/11/24 22:37:50 mast Exp $ +|| $Id: acconfig.h,v 1.110 2003/01/05 14:29:54 grubba Exp $ */ #ifndef MACHINE_H @@ -397,6 +397,9 @@ /* Define this if you have Windows NT threads */ #undef NT_THREADS +/* Define this if your THREAD_T type is a pointer type. */ +#undef PIKE_THREAD_T_IS_POINTER + /* Define this if your pthreads have pthread_condattr_default */ #undef HAVE_PTHREAD_CONDATTR_DEFAULT diff --git a/src/configure.in b/src/configure.in index 4aca2160a5f5312044daf6781af1facd4085cd74..39bd4b01bdd668f9ba520f28773fa8154922a1aa 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1,4 +1,4 @@ -AC_REVISION("$Id: configure.in,v 1.671 2003/01/04 15:04:36 kiwi Exp $") +AC_REVISION("$Id: configure.in,v 1.672 2003/01/05 14:29:54 grubba Exp $") AC_INIT(interpret.c) AC_CONFIG_HEADER(machine.h) @@ -2556,6 +2556,8 @@ if test "x$pike_cv_sys_os" = "xWindows_NT" ; then AC_DEFINE(PIKE_THREADS) using_threads="yes (nt)" + pike_cv_thread_t_type=integer + else # Test for POSIX threads @@ -2918,6 +2920,23 @@ pthread_t gazonk; AC_DEFINE(HAVE_BROKEN_LINUX_THREAD_EUID) else :; fi + AC_MSG_CHECKING([behaviour of the pthread_t type]) + AC_CACHE_VAL(pike_cv_thread_t_type, [ + AC_TRY_COMPILE([ +#include <sys/types.h> +#ifdef STDC_HEADERS +#include <stdlib.h> +#include <stddef.h> +#endif +#include <pthread.h> +extern pthread_t bar; + ], [ + void *foo = (void *)(ptrdiff_t)bar; + return 0; + ], [ pike_cv_thread_t_type=integer ], [ pike_cv_thread_t_type=pointer ]) + ]) + AC_MSG_RESULT($pike_cv_thread_t_type) + else AC_MSG_RESULT(no) LIBS="$OLDLIBS" @@ -2998,13 +3017,20 @@ int main() # : # fi fi # UNIX threads + + pike_cv_thread_t_type=integer fi # POSIX threads fi # NT else # Without threads + pike_cv_thread_t_type=integer : fi +if test "x$pike_cv_thread_t_type" = "xpointer"; then + AC_DEFINE(PIKE_THREAD_T_IS_POINTER) +fi + ######################################################################## # NOTE: The following test is hardcoded to fail when crosscompiling diff --git a/src/cyclic.h b/src/cyclic.h index 166534db6871462c3a4cfd0d84364c9c433c3f10..58542b8f6a5266114b6beab00f61cb87b8ff429f 100644 --- a/src/cyclic.h +++ b/src/cyclic.h @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: cyclic.h,v 1.8 2002/12/01 17:36:03 mast Exp $ +|| $Id: cyclic.h,v 1.9 2003/01/05 14:29:54 grubba Exp $ */ #ifndef CYCLIC_H @@ -31,7 +31,7 @@ typedef struct CYCLIC CYCLIC cyclic_struct__ #define BEGIN_CYCLIC(A,B) \ begin_cyclic(&cyclic_struct__, cyclic_identifier__, \ - (void *)(ptrdiff_t)th_self(), (void *)(A), (void *)(B)) + THREAD_T_TO_PTR(th_self()), (void *)(A), (void *)(B)) #else /* CYCLIC_DEBUG */ @@ -40,7 +40,7 @@ typedef struct CYCLIC CYCLIC cyclic_struct__ #define BEGIN_CYCLIC(A,B) \ begin_cyclic(&cyclic_struct__, &cyclic_identifier__, \ - (void *)(ptrdiff_t)th_self(), (void *)(A), (void *)(B)) + THREAD_T_TO_PTR(th_self()), (void *)(A), (void *)(B)) #endif /* !CYCLIC_DEBUG */ diff --git a/src/pike_threadlib.h b/src/pike_threadlib.h index 792da5baadab2ccfe552229db2436c899179887f..89e615d2f19b416c628a6b05a46b56ea437a0ded 100644 --- a/src/pike_threadlib.h +++ b/src/pike_threadlib.h @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: pike_threadlib.h,v 1.23 2002/12/22 17:18:55 mast Exp $ +|| $Id: pike_threadlib.h,v 1.24 2003/01/05 14:29:54 grubba Exp $ */ #ifndef PIKE_THREADLIB_H @@ -755,5 +755,12 @@ PMOD_EXPORT HANDLE CheckValidHandle(HANDLE h); #define STATIC_COND_INIT #endif +#ifndef THREAD_T_TO_PTR +#ifdef PIKE_THREAD_T_IS_POINTER +#define THREAD_T_TO_PTR(X) ((void *)(X)) +#else /* !PIKE_THREAD_T_IS_POINTER */ +#define THREAD_T_TO_PTR(X) ((void *)(ptrdiff_t)(X)) +#endif /* PIKE_THREAD_T_IS_POINTER */ +#endif /* !THREAD_T_TO_PTR */ #endif /* PIKE_THREADLIB_H */