From 4a445c1bb7dd5de0f6d554f5f70ac14d27fbeb15 Mon Sep 17 00:00:00 2001 From: Sascha Schumann Date: Sun, 5 Dec 1999 21:55:43 +0000 Subject: [PATCH] Fix leak in pthreads, and add initial support for GNU Pth --- TSRM/TSRM.c | 19 +++++++++++++++++++ TSRM/TSRM.h | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/TSRM/TSRM.c b/TSRM/TSRM.c index 4e97a61314..8cf563075b 100644 --- a/TSRM/TSRM.c +++ b/TSRM/TSRM.c @@ -63,6 +63,10 @@ static int tsrm_debug_status; /* Startup TSRM (call once for the entire process) */ TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_status) { +#if defined(GNUPTH) + pth_init(); +#endif + tsrm_tls_table_size = expected_threads; tsrm_tls_table = (tsrm_tls_entry **) calloc(tsrm_tls_table_size, sizeof(tsrm_tls_entry *)); if (!tsrm_tls_table) { @@ -116,6 +120,9 @@ TSRM_API void tsrm_shutdown(void) } tsrm_mutex_free(tsmm_mutex); tsrm_debug("Shutdown TSRM\n"); +#if defined(GNUPTH) + pth_kill(); +#endif } @@ -301,6 +308,8 @@ TSRM_API THREAD_T tsrm_thread_id(void) { #ifdef WIN32 return GetCurrentThreadId(); +#elif defined(GNUPTH) + return pth_self(); #elif defined(PTHREADS) return pthread_self(); #elif defined(NSAPI) @@ -318,6 +327,9 @@ TSRM_API MUTEX_T tsrm_mutex_alloc( void ) #ifdef WIN32 mutexp = CreateMutex(NULL,FALSE,NULL); +#elif defined(GNUPTH) + mutexp = (MUTEX_T) malloc(sizeof(*mutexp)); + pth_mutex_init(mutexp); #elif defined(PTHREADS) mutexp = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(mutexp,NULL); @@ -339,8 +351,11 @@ TSRM_API void tsrm_mutex_free( MUTEX_T mutexp ) if (mutexp) { #ifdef WIN32 CloseHandle(mutexp); +#elif defined(GNUPTH) + free(mutexp); #elif defined(PTHREADS) pthread_mutex_destroy(mutexp); + free(mutexp); #elif defined(NSAPI) crit_terminate(mutexp); #elif defined(PI3WEB) @@ -361,6 +376,8 @@ TSRM_API int tsrm_mutex_lock( MUTEX_T mutexp ) #endif #ifdef WIN32 return WaitForSingleObject(mutexp,1000); +#elif defined(GNUPTH) + return pth_mutex_acquire(mutexp, 0, NULL); #elif defined(PTHREADS) return pthread_mutex_lock(mutexp); #elif defined(NSAPI) @@ -379,6 +396,8 @@ TSRM_API int tsrm_mutex_unlock( MUTEX_T mutexp ) #endif #ifdef WIN32 return ReleaseMutex(mutexp); +#elif defined(GNUPTH) + return pth_mutex_release(mutexp); #elif defined(PTHREADS) return pthread_mutex_unlock(mutexp); #elif defined(NSAPI) diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h index a86f21c089..35eb53676b 100644 --- a/TSRM/TSRM.h +++ b/TSRM/TSRM.h @@ -27,6 +27,8 @@ #if WIN32||WINNT # include +#elif defined(GNUPTH) +# include #elif defined(PTHREADS) # include #endif @@ -48,6 +50,9 @@ typedef int ts_rsrc_id; #if defined(WIN32) # define THREAD_T DWORD # define MUTEX_T void * +#elif defined(GNUPTH) +# define THREAD_T pth_attr_t +# define MUTEX_T pth_mutex_t * #elif defined(PTHREADS) # define THREAD_T pthread_t # define MUTEX_T pthread_mutex_t * -- 2.40.0