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