Fixed pthreads on FreeBSD (based on patch by Alexandre Julliard).
diff --git a/configure b/configure
index c8e01fa..e8c2ddf 100755
--- a/configure
+++ b/configure
@@ -11549,6 +11549,11 @@
+
+
+
+
+
for ac_func in \
_lwp_create \
_pclose \
@@ -11580,6 +11585,11 @@
pclose \
popen \
pread \
+ pthread_getspecific \
+ pthread_key_create \
+ pthread_mutex_lock \
+ pthread_mutex_unlock \
+ pthread_setspecific \
pwrite \
rfork \
select \
diff --git a/configure.ac b/configure.ac
index 3223e3e..c72b739 100644
--- a/configure.ac
+++ b/configure.ac
@@ -947,6 +947,11 @@
pclose \
popen \
pread \
+ pthread_getspecific \
+ pthread_key_create \
+ pthread_mutex_lock \
+ pthread_mutex_unlock \
+ pthread_setspecific \
pwrite \
rfork \
select \
diff --git a/include/config.h.in b/include/config.h.in
index 57a0439..a0124e6 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -368,6 +368,21 @@
/* Define to 1 if you have the `pread' function. */
#undef HAVE_PREAD
+/* Define to 1 if you have the `pthread_getspecific' function. */
+#undef HAVE_PTHREAD_GETSPECIFIC
+
+/* Define to 1 if you have the `pthread_key_create' function. */
+#undef HAVE_PTHREAD_KEY_CREATE
+
+/* Define to 1 if you have the `pthread_mutex_lock' function. */
+#undef HAVE_PTHREAD_MUTEX_LOCK
+
+/* Define to 1 if you have the `pthread_mutex_unlock' function. */
+#undef HAVE_PTHREAD_MUTEX_UNLOCK
+
+/* Define to 1 if you have the `pthread_setspecific' function. */
+#undef HAVE_PTHREAD_SETSPECIFIC
+
/* Define to 1 if you have the <pty.h> header file. */
#undef HAVE_PTY_H
diff --git a/library/port.c b/library/port.c
index 25fd4b7..ddb4283 100644
--- a/library/port.c
+++ b/library/port.c
@@ -680,6 +680,30 @@
/***********************************************************************
+ * pthread functions
+ */
+
+#ifndef HAVE_PTHREAD_GETSPECIFIC
+void pthread_getspecific() { assert(0); }
+#endif
+
+#ifndef HAVE_PTHREAD_KEY_CREATE
+void pthread_key_create() { assert(0); }
+#endif
+
+#ifndef HAVE_PTHREAD_MUTEX_LOCK
+void pthread_mutex_lock() { assert(0); }
+#endif
+
+#ifndef HAVE_PTHREAD_MUTEX_UNLOCK
+void pthread_mutex_unlock() { assert(0); }
+#endif
+
+#ifndef HAVE_PTHREAD_SETSPECIFIC
+void pthread_setspecific() { assert(0); }
+#endif
+
+/***********************************************************************
* interlocked functions
*/
#ifdef __i386__
diff --git a/scheduler/pthread.c b/scheduler/pthread.c
index 7bf27f6..bc5cf81 100644
--- a/scheduler/pthread.c
+++ b/scheduler/pthread.c
@@ -44,7 +44,12 @@
* If they are not available, the libc defaults to
* non-threadsafe operation (not good). */
-#if defined(__GLIBC__)
+#if defined(__GLIBC__) || defined(__FreeBSD__)
+
+#ifndef __USE_UNIX98
+#define __USE_UNIX98
+#endif
+
#include <pthread.h>
#include <signal.h>
@@ -368,7 +373,7 @@
int __pthread_mutexattr_getkind_np(pthread_mutexattr_t *attr, int *kind)
{
- *kind = PTHREAD_MUTEX_RECURSIVE_NP;
+ *kind = PTHREAD_MUTEX_RECURSIVE;
return 0;
}
strong_alias(__pthread_mutexattr_getkind_np, pthread_mutexattr_getkind_np);
@@ -381,7 +386,7 @@
int __pthread_mutexattr_gettype(pthread_mutexattr_t *attr, int *kind)
{
- *kind = PTHREAD_MUTEX_RECURSIVE_NP;
+ *kind = PTHREAD_MUTEX_RECURSIVE;
return 0;
}
strong_alias(__pthread_mutexattr_gettype, pthread_mutexattr_gettype);