X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2Fthreads%2Fthreads.h;h=72a4872485e5723d5602c96ea81dddb307168f99;hb=84d4ea48280f6b54fdc70fe4c8b9494e3331071e;hp=bf0e58030629e58ff0ad9e615a1335646d4a0459;hpb=e6e315b903395964ca2f901936c1bbae16d42f5e;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/threads/threads.h b/ext/threads/threads.h index bf0e580..72a4872 100755 --- a/ext/threads/threads.h +++ b/ext/threads/threads.h @@ -8,9 +8,40 @@ #ifdef WIN32 #include #include +#define PERL_THREAD_DETACH(t) +#define PERL_THREAD_SETSPECIFIC(k,v) TlsSetValue(k,v) +#define PERL_THREAD_GETSPECIFIC(k,v) v = TlsGetValue(k) +#define PERL_THREAD_ALLOC_SPECIFIC(k) \ +STMT_START {\ + if((k = TlsAlloc()) == TLS_OUT_OF_INDEXES) {\ + PerlIO_printf(PerlIO_stderr(),"panic threads.h: TlsAlloc");\ + exit(1);\ + }\ +} STMT_END #else #include #include + +#define PERL_THREAD_SETSPECIFIC(k,v) pthread_setspecific(k,v) +#ifdef OLD_PTHREADS_API +#define PERL_THREAD_DETACH(t) pthread_detach(&(t)) +#define PERL_THREAD_GETSPECIFIC(k,v) pthread_getspecific(k,&v) +#define PERL_THREAD_ALLOC_SPECIFIC(k) STMT_START {\ + if(pthread_keycreate(&(k),0)) {\ + PerlIO_printf(PerlIO_stderr(), "panic threads.h: pthread_key_create");\ + exit(1);\ + }\ +} STMT_END +#else +#define PERL_THREAD_DETACH(t) pthread_detach((t)) +#define PERL_THREAD_GETSPECIFIC(k,v) v = pthread_getspecific(k) +#define PERL_THREAD_ALLOC_SPECIFIC(k) STMT_START {\ + if(pthread_key_create(&(k),0)) {\ + PerlIO_printf(PerlIO_stderr(), "panic threads.h: pthread_key_create");\ + exit(1);\ + }\ +} STMT_END +#endif #endif typedef struct { @@ -38,7 +69,7 @@ static perl_mutex create_mutex; /* protects the creation of threads ??? */ I32 tid_counter = 1; shared_sv* threads; - +perl_key self_key; @@ -47,7 +78,7 @@ shared_sv* threads; #ifdef WIN32 THREAD_RET_TYPE Perl_thread_run(LPVOID arg); #else -void Perl_thread_run(ithread* thread); +void* Perl_thread_run(void * arg); #endif void Perl_thread_destruct(ithread* thread);