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

Reply via email to