aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTure Pålsson <ture@lysator.liu.se>2015-09-09 19:18:28 +0200
committerTure Pålsson <ture@lysator.liu.se>2015-09-09 19:18:28 +0200
commite2f5f28714de471d98cabe50096a5fdf3aeef0a3 (patch)
tree21a14ad02cb9368f40c2962d8a87377225bea488
parent759c0bad01193f61aaa0b5f01de71c400c2699fd (diff)
downloadPROJ-e2f5f28714de471d98cabe50096a5fdf3aeef0a3.tar.gz
PROJ-e2f5f28714de471d98cabe50096a5fdf3aeef0a3.zip
Use autoconf for PTHREAD_MUTEX_RECURSIVE (#302)
On FreeBSD 10, PTHREAD_MUTEX_RECURSIVE exists, but as an enum constant, not a #define macro, so it cannot be detected using #ifdef.
-rw-r--r--configure.in4
-rw-r--r--src/pj_mutex.c8
2 files changed, 9 insertions, 3 deletions
diff --git a/configure.in b/configure.in
index 095a191f..30f7a16d 100644
--- a/configure.in
+++ b/configure.in
@@ -98,6 +98,10 @@ if test "$with_mutex" = yes -o x"$with_mutex" = x ; then
THREAD_LIB="-lpthread"
fi
AC_CHECK_LIB(pthread,pthread_mutexattr_settype,,,)
+ AC_CHECK_DECL(PTHREAD_MUTEX_RECURSIVE,
+ AC_DEFINE(HAVE_PTHREAD_MUTEX_RECURSIVE, [], [Define if your pthreads implementation have PTHREAD_MUTEX_RECURSIVE]),
+ ,
+ [#include <pthread.h>])
AC_MSG_RESULT([enabled, pthread])
else
MUTEX_SETTING=stub
diff --git a/src/pj_mutex.c b/src/pj_mutex.c
index 349537c8..037c4bbb 100644
--- a/src/pj_mutex.c
+++ b/src/pj_mutex.c
@@ -33,6 +33,8 @@
#define _XOPEN_SOURCE 500
#endif
+#include "proj_config.h"
+
#ifndef _WIN32
#include <projects.h>
#else
@@ -120,10 +122,10 @@ void pj_acquire_lock()
pthread_mutex_lock( &pj_precreated_lock);
pthread_mutexattr_init(&mutex_attr);
-#ifndef PTHREAD_MUTEX_RECURSIVE
- pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE_NP);
-#else
+#ifdef HAVE_PTHREAD_MUTEX_RECURSIVE
pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);
+#else
+ pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE_NP);
#endif
pthread_mutex_init(&pj_core_lock, &mutex_attr);
pj_core_lock_created = 1;