summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TSRM/TSRM.c19
-rw-r--r--TSRM/TSRM.h5
2 files changed, 24 insertions, 0 deletions
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 <windows.h>
+#elif defined(GNUPTH)
+# include <pth.h>
#elif defined(PTHREADS)
# include <pthread.h>
#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 *