{
#ifdef TSRM_WIN32
return GetCurrentThreadId();
+#elif defined(NETWARE)
+ return NXThreadGetId();
#elif defined(GNUPTH)
return pth_self();
#elif defined(PTHREADS)
TSRM_API MUTEX_T tsrm_mutex_alloc(void)
{
MUTEX_T mutexp;
+#ifdef NETWARE
+ long flags = 0; /* Don't require NX_MUTEX_RECURSIVE, I guess */
+ NXHierarchy_t order = 0;
+ NX_LOCK_INFO_ALLOC (lockInfo, "PHP-TSRM", 0);
+#endif
#ifdef TSRM_WIN32
mutexp = malloc(sizeof(CRITICAL_SECTION));
InitializeCriticalSection(mutexp);
+#elif defined(NETWARE)
+ mutexp = NXMutexAlloc(flags, order, &lockInfo); /* return value ignored for now */
#elif defined(GNUPTH)
mutexp = (MUTEX_T) malloc(sizeof(*mutexp));
pth_mutex_init(mutexp);
if (mutexp) {
#ifdef TSRM_WIN32
DeleteCriticalSection(mutexp);
+#elif defined(NETWARE)
+ NXMutexFree(mutexp);
#elif defined(GNUPTH)
free(mutexp);
#elif defined(PTHREADS)
#ifdef TSRM_WIN32
EnterCriticalSection(mutexp);
return 1;
+#elif defined(NETWARE)
+ return NXLock(mutexp);
#elif defined(GNUPTH)
return pth_mutex_acquire(mutexp, 0, NULL);
#elif defined(PTHREADS)
#ifdef TSRM_WIN32
LeaveCriticalSection(mutexp);
return 1;
+#elif defined(NETWARE)
+ return NXUnlock(mutexp);
#elif defined(GNUPTH)
return pth_mutex_release(mutexp);
#elif defined(PTHREADS)
#ifdef TSRM_WIN32
# include <windows.h>
+#elif defined(NETWARE)
+# include <nks/thread.h>
+# include <nks/synch.h>
#elif defined(GNUPTH)
# include <pth.h>
#elif defined(PTHREADS)
#ifdef TSRM_WIN32
# define THREAD_T DWORD
# define MUTEX_T CRITICAL_SECTION *
+#elif defined(NETWARE)
+# define THREAD_T NXThreadId_t
+# define MUTEX_T NXMutex_t *
#elif defined(GNUPTH)
# define THREAD_T pth_t
# define MUTEX_T pth_mutex_t *