]> granicus.if.org Git - php/commitdiff
Fix leak in pthreads, and add initial support for GNU Pth
authorSascha Schumann <sas@php.net>
Sun, 5 Dec 1999 21:55:43 +0000 (21:55 +0000)
committerSascha Schumann <sas@php.net>
Sun, 5 Dec 1999 21:55:43 +0000 (21:55 +0000)
TSRM/TSRM.c
TSRM/TSRM.h

index 4e97a6131489ee54ac13dff7f016e8ec5b3f18c7..8cf563075b43a61f5453e80b00186db589767e20 100644 (file)
@@ -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)
index a86f21c089213072f076fdd315a74bb2799e3a03..35eb53676ba5d4aeaebb374d7074234cf502957d 100644 (file)
@@ -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 *