/* 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) {
}
tsrm_mutex_free(tsmm_mutex);
tsrm_debug("Shutdown TSRM\n");
+#if defined(GNUPTH)
+ pth_kill();
+#endif
}
{
#ifdef WIN32
return GetCurrentThreadId();
+#elif defined(GNUPTH)
+ return pth_self();
#elif defined(PTHREADS)
return pthread_self();
#elif defined(NSAPI)
#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);
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)
#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)
#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)
#if WIN32||WINNT
# include <windows.h>
+#elif defined(GNUPTH)
+# include <pth.h>
#elif defined(PTHREADS)
# include <pthread.h>
#endif
#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 *