Any chance of committing this patch. Adds support for beos threading to TSRM and some small corrections for virtual_cwd.
Thanks. david Using port 2401 Index: TSRM/TSRM.c =================================================================== RCS file: /repository/TSRM/TSRM.c,v retrieving revision 1.44 diff -u -r1.44 TSRM.c --- TSRM/TSRM.c 7 Aug 2002 14:47:05 -0000 1.44 +++ TSRM/TSRM.c 2 Oct 2002 23:57:12 -0000 @@ -95,9 +95,10 @@ static int tls_key; #elif defined(TSRM_WIN32) static DWORD tls_key; +#elif defined(BETHREADS) +static int32 tls_key; #endif - /* Startup TSRM (call once for the entire process) */ TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename) { @@ -110,6 +111,8 @@ st_key_create(&tls_key, 0); #elif defined(TSRM_WIN32) tls_key = TlsAlloc(); +#elif defined(BETHREADS) + tls_key = tls_allocate(); #endif tsrm_error_file = stderr; @@ -258,6 +261,8 @@ st_thread_setspecific(tls_key, (void *) *thread_resources_ptr); #elif defined(TSRM_WIN32) TlsSetValue(tls_key, (void *) *thread_resources_ptr); +#elif defined(BETHREADS) + tls_set(tls_key, (void*) *thread_resources_ptr); #endif if (tsrm_new_thread_begin_handler) { @@ -297,6 +302,8 @@ thread_resources = st_thread_getspecific(tls_key); #elif defined(TSRM_WIN32) thread_resources = TlsGetValue(tls_key); +#elif defined(BETHREADS) + thread_resources = (tsrm_tls_entry*)tls_get(tls_key); #else thread_resources = NULL; #endif @@ -423,6 +430,8 @@ return PIThread_getCurrent(); #elif defined(TSRM_ST) return st_thread_self(); +#elif defined(BETHREADS) + return find_thread(NULL); #endif } @@ -454,6 +463,10 @@ mutexp = PIPlatform_allocLocalMutex(); #elif defined(TSRM_ST) mutexp = st_mutex_new(); +#elif defined(BETHREADS) + mutexp = (beos_ben*)malloc(sizeof(beos_ben)); + mutexp->ben = 0; + mutexp->sem = create_sem(1, "PHP sempahore"); #endif #ifdef THR_DEBUG printf("Mutex created thread: %d\n",mythreadid()); @@ -481,6 +494,9 @@ PISync_delete(mutexp); #elif defined(TSRM_ST) st_mutex_destroy(mutexp); +#elif defined(BETHREADS) + delete_sem(mutexp->sem); + free(mutexp); #endif } #ifdef THR_DEBUG @@ -508,6 +524,10 @@ return PISync_lock(mutexp); #elif defined(TSRM_ST) return st_mutex_lock(mutexp); +#elif defined(BETHREADS) + if (atomic_add(&mutexp->ben, 1) != 0) + return acquire_sem(mutexp->sem); + return 0; #endif } @@ -531,6 +551,10 @@ return PISync_unlock(mutexp); #elif defined(TSRM_ST) return st_mutex_unlock(mutexp); +#elif defined(BETHREADS) + if (atomic_add(&mutexp->ben, -1) != 1) + return release_sem(mutexp->sem); + return 0; #endif } Index: TSRM/TSRM.h =================================================================== RCS file: /repository/TSRM/TSRM.h,v retrieving revision 1.35 diff -u -r1.35 TSRM.h --- TSRM/TSRM.h 7 Aug 2002 14:47:05 -0000 1.35 +++ TSRM/TSRM.h 2 Oct 2002 23:57:12 -0000 @@ -47,6 +47,9 @@ # include <pthread.h> #elif defined(TSRM_ST) # include <st.h> +#elif defined(BETHREADS) +#include <kernel/OS.h> +#include <TLS.h> #endif typedef int ts_rsrc_id; @@ -73,6 +76,13 @@ #elif defined(TSRM_ST) # define THREAD_T st_thread_t # define MUTEX_T st_mutex_t +#elif defined(BETHREADS) +# define THREAD_T thread_id +typedef struct { + sem_id sem; + int32 ben; +} beos_ben; +# define MUTEX_T beos_ben * #endif typedef void (*ts_allocate_ctor)(void *, void ***); Index: TSRM/threads.m4 =================================================================== RCS file: /repository/TSRM/threads.m4,v retrieving revision 1.11 diff -u -r1.11 threads.m4 --- TSRM/threads.m4 19 Sep 2001 09:01:05 -0000 1.11 +++ TSRM/threads.m4 2 Oct 2002 23:57:12 -0000 @@ -102,26 +102,31 @@ dnl AC_DEFUN(PTHREADS_CHECK,[ -save_CFLAGS=$CFLAGS -save_LIBS=$LIBS -PTHREADS_ASSIGN_VARS -PTHREADS_CHECK_COMPILE -LIBS=$save_LIBS -CFLAGS=$save_CFLAGS +if test "$beos_threads" = "1"; then + pthreads_working="yes" + ac_cv_pthreads_cflags="" +else + save_CFLAGS=$CFLAGS + save_LIBS=$LIBS + PTHREADS_ASSIGN_VARS + PTHREADS_CHECK_COMPILE + LIBS=$save_LIBS + CFLAGS=$save_CFLAGS -AC_CACHE_CHECK(for pthreads_cflags,ac_cv_pthreads_cflags,[ -ac_cv_pthreads_cflags= -if test "$pthreads_working" != "yes"; then - for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do - ac_save=$CFLAGS - CFLAGS="$CFLAGS $flag" - PTHREADS_CHECK_COMPILE - CFLAGS=$ac_save - if test "$pthreads_working" = "yes"; then - ac_cv_pthreads_cflags=$flag - break - fi - done + AC_CACHE_CHECK(for pthreads_cflags,ac_cv_pthreads_cflags,[ + ac_cv_pthreads_cflags= + if test "$pthreads_working" != "yes"; then + for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do + ac_save=$CFLAGS + CFLAGS="$CFLAGS $flag" + PTHREADS_CHECK_COMPILE + CFLAGS=$ac_save + if test "$pthreads_working" = "yes"; then + ac_cv_pthreads_cflags=$flag + break + fi + done + fi fi ]) Index: TSRM/tsrm.m4 =================================================================== RCS file: /repository/TSRM/tsrm.m4,v retrieving revision 1.13 diff -u -r1.13 tsrm.m4 --- TSRM/tsrm.m4 21 Aug 2001 11:00:22 -0000 1.13 +++ TSRM/tsrm.m4 2 Oct 2002 23:57:13 -0000 @@ -73,15 +73,19 @@ AC_DEFUN(TSRM_CHECK_PTHREADS,[ PTHREADS_CHECK - -if test "$pthreads_working" != "yes"; then - AC_MSG_ERROR(Your system seems to lack POSIX threads.) -fi - -AC_DEFINE(PTHREADS, 1, Whether to use Pthreads) -AC_MSG_CHECKING(for POSIX threads) -AC_MSG_RESULT(yes) +if test "$beos_threads" = "1"; then + AC_DEFINE(BETHREADS, 1, Whether to use native BeOS threads) +else + if test "$pthreads_working" != "yes"; then + AC_MSG_ERROR(Your system seems to lack POSIX threads.) + fi + + AC_DEFINE(PTHREADS, 1, Whether to use Pthreads) + + AC_MSG_CHECKING(for POSIX threads) + AC_MSG_RESULT(yes) +fi ]) Index: TSRM/tsrm_virtual_cwd.c =================================================================== RCS file: /repository/TSRM/tsrm_virtual_cwd.c,v retrieving revision 1.30 diff -u -r1.30 tsrm_virtual_cwd.c --- TSRM/tsrm_virtual_cwd.c 29 May 2002 08:41:21 -0000 1.30 +++ TSRM/tsrm_virtual_cwd.c 2 Oct 2002 23:57:13 -0000 @@ -41,6 +41,10 @@ #include "tsrm_nw.h" #endif +#ifdef __BEOS__ +#define realpath(x,y) strcpy(y,x) +#endif + #define VIRTUAL_CWD_DEBUG 0 #include "TSRM.h" @@ -298,7 +302,7 @@ if (path_length == 0) return (0); -#if !defined(TSRM_WIN32) && !defined(__BEOS__) && !defined(NETWARE) +#if !defined(TSRM_WIN32) && !defined(NETWARE) if (IS_ABSOLUTE_PATH(path, path_length)) { if (realpath(path, resolved_path)) { path = resolved_path; -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php