various shenanigans in change#5342
Gurusamy Sarathy [Tue, 29 Feb 2000 06:01:22 +0000 (06:01 +0000)]
p4raw-link: @5342 on //depot/perl: ba869debd80c55cfae8e9d4de0991d62f9efcb9b

p4raw-id: //depot/perl@5343

makedef.pl
thread.h
util.c
win32/Makefile
win32/makefile.mk
win32/win32.h
win32/win32thread.h

index a54b26c..1cd85c7 100644 (file)
@@ -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
index 09ed596..72292b5 100644 (file)
--- a/thread.h
+++ b/thread.h
 #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 (file)
--- 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
 }
 
index 321d341..27e597f 100644 (file)
@@ -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)
index c235e9d..44b5b3a 100644 (file)
@@ -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)
index f102234..6f4c0d0 100644 (file)
@@ -158,6 +158,8 @@ struct utsname {
 #  define      F_OK    0
 #endif
 
+#define PERL_GET_CONTEXT_DEFINED
+
 /* Compiler-specific stuff. */
 
 #ifdef __BORLANDC__            /* Borland C++ */
index cfa13cc..46c6bf5 100644 (file)
@@ -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)