From: Jarkko Hietaniemi Date: Thu, 17 May 2001 14:21:08 +0000 (+0000) Subject: Macrofy the getspecific (and use it also in util.c) X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8b8b35abf0ac836d99804d38380d3c236b12c28e;p=p5sagit%2Fp5-mst-13.2.git Macrofy the getspecific (and use it also in util.c) p4raw-id: //depot/perl@10143 --- diff --git a/thread.h b/thread.h index 9122885..b14907a 100644 --- a/thread.h +++ b/thread.h @@ -249,15 +249,22 @@ } STMT_END #endif /* JOIN */ -#ifndef PERL_GET_CONTEXT -# if (defined(__ALPHA) && (__VMS_VER >= 70000000)) || (defined(__alpha) && defined(__osf__)) /* Use an unchecked fetch of thread-specific data instead of a checked one. * It would fail if the key were bogus, but if the key were bogus then * Really Bad Things would be happening anyway. --dan */ -# define PERL_GET_CONTEXT pthread_unchecked_getspecific_np(PL_thr_key) -# else -# define PERL_GET_CONTEXT pthread_getspecific(PL_thr_key) -# endif +#if (defined(__ALPHA) && (__VMS_VER >= 70000000)) || + (defined(__alpha) && defined(__osf__)) /* Available only on >= 4.0 */ +# define HAS_PTHREAD_UNCHECKED_GETSPECIFIC_NP /* Configure test needed */ +#endif + +#ifdef HAS_PTHREAD_UNCHECKED_GETSPECIFIC_NP +# define PTHREAD_GETSPECIFIC(key) pthread_unchecked_getspecific_np(key) +#else +# define PTHREAD_GETSPECIFIC(key) pthread_getspecific(key) +#endif + +#ifndef PERL_GET_CONTEXT +# define PERL_GET_CONTEXT PTHREAD_GETSPECIFIC(PL_thr_key) #endif #ifndef PERL_SET_CONTEXT diff --git a/util.c b/util.c index 848a61e..12c5f0d 100644 --- a/util.c +++ b/util.c @@ -3490,14 +3490,10 @@ Perl_get_context(void) return (void*)t; # else # ifdef I_MACH_CTHREADS - return (void*)cthread_data(cthread_self()); + return (void*)cthread_data(cthread_self()); # else -# if defined(__ALPHA) && (__VMS_VER >= 70000000) - return (void*)pthread_unchecked_getspecific_np(PL_thr_key); -# else - return (void*)pthread_getspecific(PL_thr_key); -# endif -# endif + return (void*)PTHREAD_GETSPECIFIC(PL_thr_key); +# endif # endif #else return (void*)NULL;