From: Gurusamy Sarathy Date: Tue, 29 Feb 2000 06:01:22 +0000 (+0000) Subject: various shenanigans in change#5342 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=c44d3fdb45c0c48dcd8af6dc9f4a4166137bf839;p=p5sagit%2Fp5-mst-13.2.git various shenanigans in change#5342 p4raw-link: @5342 on //depot/perl: ba869debd80c55cfae8e9d4de0991d62f9efcb9b p4raw-id: //depot/perl@5343 --- diff --git a/makedef.pl b/makedef.pl index a54b26c..1cd85c7 100644 --- a/makedef.pl +++ b/makedef.pl @@ -551,6 +551,7 @@ if ($PLATFORM eq 'win32') { foreach my $symbol (qw( boot_DynaLoader Perl_init_os_extras + Perl_thread_create Perl_win32_init RunPerl win32_errno diff --git a/thread.h b/thread.h index 09ed596..72292b5 100644 --- a/thread.h +++ b/thread.h @@ -264,8 +264,10 @@ #ifndef ALLOC_THREAD_KEY # define ALLOC_THREAD_KEY \ STMT_START { \ - if (pthread_key_create(&PL_thr_key, 0)) \ - Perl_croak(aTHX_ "panic: pthread_key_create"); \ + if (pthread_key_create(&PL_thr_key, 0)) { \ + fprintf(stderr, "panic: pthread_key_create"); \ + exit(1); \ + } \ } STMT_END #endif diff --git a/util.c b/util.c index 1202b33..091e162 100644 --- a/util.c +++ b/util.c @@ -3303,8 +3303,12 @@ Perl_get_context(void) Perl_croak_nocontext("panic: pthread_getspecific"); return (void*)t; # else +# ifdef I_MACH_CTHREADS + return (void*)cthread_data(cthread_self()); +# else return (void*)pthread_getspecific(PL_thr_key); # endif +# endif #else return (void*)NULL; #endif @@ -3314,8 +3318,12 @@ void Perl_set_context(void *t) { #if defined(USE_THREADS) || defined(USE_ITHREADS) +# ifdef I_MACH_CTHREADS + cthread_set_data(cthread_self(), t); +# else if (pthread_setspecific(PL_thr_key, t)) Perl_croak_nocontext("panic: pthread_setspecific"); +# endif #endif } diff --git a/win32/Makefile b/win32/Makefile index 321d341..27e597f 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -535,11 +535,8 @@ EXTRACORE_SRC = $(EXTRACORE_SRC) ..\perlio.c WIN32_SRC = \ .\win32.c \ - .\win32sck.c - -!IF "$(USE_5005THREADS)" == "define" -WIN32_SRC = $(WIN32_SRC) .\win32thread.c -!ENDIF + .\win32sck.c \ + .\win32thread.c !IF "$(CRYPT_SRC)" != "" WIN32_SRC = $(WIN32_SRC) .\$(CRYPT_SRC) diff --git a/win32/makefile.mk b/win32/makefile.mk index c235e9d..44b5b3a 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -658,11 +658,8 @@ EXTRACORE_SRC += ..\perlio.c WIN32_SRC = \ .\win32.c \ - .\win32sck.c - -.IF "$(USE_5005THREADS)" == "define" -WIN32_SRC += .\win32thread.c -.ENDIF + .\win32sck.c \ + .\win32thread.c .IF "$(CRYPT_SRC)" != "" WIN32_SRC += .\$(CRYPT_SRC) diff --git a/win32/win32.h b/win32/win32.h index f102234..6f4c0d0 100644 --- a/win32/win32.h +++ b/win32/win32.h @@ -158,6 +158,8 @@ struct utsname { # define F_OK 0 #endif +#define PERL_GET_CONTEXT_DEFINED + /* Compiler-specific stuff. */ #ifdef __BORLANDC__ /* Borland C++ */ diff --git a/win32/win32thread.h b/win32/win32thread.h index cfa13cc..46c6bf5 100644 --- a/win32/win32thread.h +++ b/win32/win32thread.h @@ -168,8 +168,6 @@ extern __declspec(thread) void *PL_current_context; #define PERL_SET_CONTEXT(t) Perl_set_context(t) #endif -#define PERL_GET_CONTEXT_DEFINED - #if defined(USE_THREADS) struct perl_thread; int Perl_thread_create (struct perl_thread *thr, thread_func_t *fn); @@ -185,8 +183,10 @@ END_EXTERN_C #define INIT_THREADS NOOP #define ALLOC_THREAD_KEY \ STMT_START { \ - if ((PL_thr_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) \ - Perl_croak_nocontext("panic: TlsAlloc"); \ + if ((PL_thr_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) { \ + fprintf(stderr,"panic: TlsAlloc"); \ + exit(1); \ + } \ } STMT_END #if defined(USE_RTL_THREAD_API) && !defined(_MSC_VER)