diff --git a/configure b/configure index c8e01fac549..e8c2ddf0a4f 100755 --- a/configure +++ b/configure @@ -11543,6 +11543,11 @@ fi + + + + + @@ -11580,6 +11585,11 @@ for ac_func in \ 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 3223e3e889c..c72b7399629 100644 --- a/configure.ac +++ b/configure.ac @@ -947,6 +947,11 @@ AC_CHECK_FUNCS(\ 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 57a0439f9db..a0124e6b63a 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 header file. */ #undef HAVE_PTY_H diff --git a/library/port.c b/library/port.c index 25fd4b73960..ddb4283223b 100644 --- a/library/port.c +++ b/library/port.c @@ -679,6 +679,30 @@ void *wine_memcpy_unaligned( void *dst, const void *src, size_t size ) #endif +/*********************************************************************** + * 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 */ diff --git a/scheduler/pthread.c b/scheduler/pthread.c index 7bf27f6723a..bc5cf813f2b 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 #include @@ -368,7 +373,7 @@ strong_alias(__pthread_mutexattr_setkind_np, pthread_mutexattr_setkind_np); 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 @@ strong_alias(__pthread_mutexattr_settype, pthread_mutexattr_settype); 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);