diff --git a/src/threads.h b/src/threads.h index 816c87d88b0b767361f85134d7ad15ae19843ddd..390f9207900cec3ec6025873b53ac4b60a0fd7b8 100644 --- a/src/threads.h +++ b/src/threads.h @@ -1,5 +1,5 @@ /* - * $Id: threads.h,v 1.104 2000/10/03 19:13:24 grubba Exp $ + * $Id: threads.h,v 1.105 2000/10/26 01:34:51 hubbe Exp $ */ #ifndef THREADS_H #define THREADS_H @@ -94,6 +94,22 @@ void th_atfork_child(void); #define THREAD_T pthread_t #define PIKE_MUTEX_T pthread_mutex_t #define mt_init(X) pthread_mutex_init((X),0) + +#if !defined(HAVE_PTHREAD_MUTEX_RECURSIVE_NP) && defined(HAVE_PTHREAD_MUTEX_RECURSIVE) +#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE +#define HAVE_PTHREAD_MUTEX_RECURSIVE_NP +#endif + +#ifdef HAVE_PTHREAD_MUTEX_RECURSIVE_NP +#define mt_init_recursive(X) \ + do{ \ + pthread_mutexattr_t attr; \ + pthread_mutexattr_init(&attr); \ + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); \ + pthread_mutex_init((X), &attr); \ + }while(0) +#endif + #define mt_lock(X) pthread_mutex_lock(X) #define mt_trylock(X) pthread_mutex_trylock(X) #define mt_unlock(X) pthread_mutex_unlock(X) @@ -117,6 +133,13 @@ extern pthread_attr_t small_pattr; #define th_create_small(ID,fun,arg) pthread_create(ID,&small_pattr,fun,arg) #define th_exit(foo) pthread_exit(foo) #define th_self() pthread_self() + +#define TH_KEY_T pthread_key_t +#define th_key_create pthread_key_create +#define th_setspecific pthread_setspecific +#define th_getpecific pthread_getspecific + + #ifdef HAVE_PTHREAD_KILL #define th_kill(ID,sig) pthread_kill((ID),(sig)) #else /* !HAVE_PTHREAD_KILL */