X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/b5f8cc5c1ad883dce8b5a96bed64f2340aa86716..f21ef9aab6235ccc523cb726f29ba21a28883bcb:/thread.h diff --git a/thread.h b/thread.h index 93062c5..e695889 100644 --- a/thread.h +++ b/thread.h @@ -1,6 +1,7 @@ /* thread.h * - * Copyright (C) 1999, 2000, 2001, 2002, 2004, by Larry Wall and others + * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + * by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -15,8 +16,7 @@ #ifdef WIN32 # include -#else -#ifdef NETWARE +#elif defined(NETWARE) # include #else # ifdef OLD_PTHREADS_API /* Here be dragons. */ @@ -39,9 +39,6 @@ # define NEED_PTHREAD_INIT # define PTHREAD_CREATE_JOINABLE (1) # endif -# ifdef __OPEN_VM -# define pthread_addr_t void * -# endif # ifdef OEMVS # define pthread_addr_t void * # define pthread_create(t,a,s,d) pthread_create(t,&(a),s,d) @@ -64,7 +61,7 @@ # define pthread_mutexattr_init(a) pthread_mutexattr_create(a) # define pthread_mutexattr_settype(a,t) pthread_mutexattr_setkind_np(a,t) # endif -# if defined(DJGPP) || defined(__OPEN_VM) || defined(OEMVS) +# if defined(DJGPP) || defined(OEMVS) # define PTHREAD_ATTR_SETDETACHSTATE(a,s) pthread_attr_setdetachstate(a,&(s)) # define YIELD pthread_yield(NULL) # endif @@ -73,7 +70,6 @@ # define pthread_mutexattr_default NULL # define pthread_condattr_default NULL # endif -#endif /* NETWARE */ #endif #ifndef PTHREAD_CREATE @@ -93,8 +89,13 @@ # endif #endif -#ifdef DGUX -# define THREAD_CREATE_NEEDS_STACK (32*1024) +#ifdef __VMS + /* Default is 1024 on VAX, 8192 otherwise */ +# ifdef __ia64 +# define THREAD_CREATE_NEEDS_STACK (48*1024) +# else +# define THREAD_CREATE_NEEDS_STACK (32*1024) +# endif #endif #ifdef I_MACH_CTHREADS @@ -143,14 +144,10 @@ *c = 0; \ } STMT_END -#define THREAD_CREATE(thr, f) (thr->self = cthread_fork(f, thr), 0) -#define THREAD_POST_CREATE(thr) - #define THREAD_RET_TYPE any_t -#define THREAD_RET_CAST(x) ((any_t) x) #define DETACH(t) cthread_detach(t->self) -#define JOIN(t, avp) (*(avp) = (AV *)cthread_join(t->self)) +#define JOIN(t, avp) (*(avp) = MUTABLE_AV(cthread_join(t->self))) #define PERL_SET_CONTEXT(t) cthread_set_data(cthread_self(), t) #define PERL_GET_CONTEXT cthread_data(cthread_self()) @@ -166,16 +163,12 @@ #ifndef YIELD # ifdef SCHED_YIELD # define YIELD SCHED_YIELD -# else -# ifdef HAS_SCHED_YIELD -# define YIELD sched_yield() -# else -# ifdef HAS_PTHREAD_YIELD +# elif defined(HAS_SCHED_YIELD) +# define YIELD sched_yield() +# elif defined(HAS_PTHREAD_YIELD) /* pthread_yield(NULL) platforms are expected * to have #defined YIELD for themselves. */ -# define YIELD pthread_yield() -# endif -# endif +# define YIELD pthread_yield() # endif #endif @@ -205,10 +198,18 @@ } STMT_END # endif +# ifdef PERL_TSA_ACTIVE +# define perl_pthread_mutex_lock(m) perl_tsa_mutex_lock(m) +# define perl_pthread_mutex_unlock(m) perl_tsa_mutex_unlock(m) +# else +# define perl_pthread_mutex_lock(m) pthread_mutex_lock(m) +# define perl_pthread_mutex_unlock(m) pthread_mutex_unlock(m) +# endif + # define MUTEX_LOCK(m) \ STMT_START { \ int _eC_; \ - if ((_eC_ = pthread_mutex_lock((m)))) \ + if ((_eC_ = perl_pthread_mutex_lock((m)))) \ Perl_croak_nocontext("panic: MUTEX_LOCK (%d) [%s:%d]", \ _eC_, __FILE__, __LINE__); \ } STMT_END @@ -216,7 +217,7 @@ # define MUTEX_UNLOCK(m) \ STMT_START { \ int _eC_; \ - if ((_eC_ = pthread_mutex_unlock((m)))) \ + if ((_eC_ = perl_pthread_mutex_unlock((m)))) \ Perl_croak_nocontext("panic: MUTEX_UNLOCK (%d) [%s:%d]", \ _eC_, __FILE__, __LINE__); \ } STMT_END @@ -332,10 +333,8 @@ #ifndef ALLOC_THREAD_KEY # define ALLOC_THREAD_KEY \ STMT_START { \ - int _eC_; \ - if ((_eC_ = pthread_key_create(&PL_thr_key, 0))) { \ - PerlIO_printf(PerlIO_stderr(), "panic: pthread_key_create (%d) [%s:%d]", \ - _eC_, __FILE__, __LINE__); \ + if (pthread_key_create(&PL_thr_key, 0)) { \ + PERL_UNUSED_RESULT(write(2, STR_WITH_LEN("panic: pthread_key_create failed\n"))); \ exit(1); \ } \ } STMT_END @@ -360,7 +359,6 @@ #ifndef THREAD_RET_TYPE # define THREAD_RET_TYPE void * -# define THREAD_RET_CAST(p) ((void *)(p)) #endif /* THREAD_RET */ # define LOCK_DOLLARZERO_MUTEX MUTEX_LOCK(&PL_dollarzero_mutex) @@ -369,87 +367,47 @@ #endif /* USE_ITHREADS */ #ifndef MUTEX_LOCK -# define MUTEX_LOCK(m) +# define MUTEX_LOCK(m) NOOP #endif #ifndef MUTEX_UNLOCK -# define MUTEX_UNLOCK(m) +# define MUTEX_UNLOCK(m) NOOP #endif #ifndef MUTEX_INIT -# define MUTEX_INIT(m) +# define MUTEX_INIT(m) NOOP #endif #ifndef MUTEX_DESTROY -# define MUTEX_DESTROY(m) +# define MUTEX_DESTROY(m) NOOP #endif #ifndef COND_INIT -# define COND_INIT(c) +# define COND_INIT(c) NOOP #endif #ifndef COND_SIGNAL -# define COND_SIGNAL(c) +# define COND_SIGNAL(c) NOOP #endif #ifndef COND_BROADCAST -# define COND_BROADCAST(c) +# define COND_BROADCAST(c) NOOP #endif #ifndef COND_WAIT -# define COND_WAIT(c, m) +# define COND_WAIT(c, m) NOOP #endif #ifndef COND_DESTROY -# define COND_DESTROY(c) -#endif - -#ifndef LOCK_SV_MUTEX -# define LOCK_SV_MUTEX -#endif - -#ifndef UNLOCK_SV_MUTEX -# define UNLOCK_SV_MUTEX -#endif - -#ifndef LOCK_STRTAB_MUTEX -# define LOCK_STRTAB_MUTEX -#endif - -#ifndef UNLOCK_STRTAB_MUTEX -# define UNLOCK_STRTAB_MUTEX -#endif - -#ifndef LOCK_CRED_MUTEX -# define LOCK_CRED_MUTEX -#endif - -#ifndef UNLOCK_CRED_MUTEX -# define UNLOCK_CRED_MUTEX -#endif - -#ifndef LOCK_FDPID_MUTEX -# define LOCK_FDPID_MUTEX -#endif - -#ifndef UNLOCK_FDPID_MUTEX -# define UNLOCK_FDPID_MUTEX -#endif - -#ifndef LOCK_SV_LOCK_MUTEX -# define LOCK_SV_LOCK_MUTEX -#endif - -#ifndef UNLOCK_SV_LOCK_MUTEX -# define UNLOCK_SV_LOCK_MUTEX +# define COND_DESTROY(c) NOOP #endif #ifndef LOCK_DOLLARZERO_MUTEX -# define LOCK_DOLLARZERO_MUTEX +# define LOCK_DOLLARZERO_MUTEX NOOP #endif #ifndef UNLOCK_DOLLARZERO_MUTEX -# define UNLOCK_DOLLARZERO_MUTEX +# define UNLOCK_DOLLARZERO_MUTEX NOOP #endif /* THR, SET_THR, and dTHR are there for compatibility with old versions */ @@ -468,3 +426,7 @@ #ifndef INIT_THREADS # define INIT_THREADS NOOP #endif + +/* + * ex: set ts=8 sts=4 sw=4 et: + */