aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-04-28 12:33:21 +0200
committerEven Rouault <even.rouault@spatialys.com>2018-04-28 16:47:53 +0200
commit565cceda9bd8970dc76fd6001b7e09ec48267126 (patch)
treec2f2268ef453a57668bace60f5c7fd59737549b9
parente36a776dc1070b4878b2b18538366fa369114f37 (diff)
downloadPROJ-565cceda9bd8970dc76fd6001b7e09ec48267126.tar.gz
PROJ-565cceda9bd8970dc76fd6001b7e09ec48267126.zip
pj_mutex.c: use PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP when available
-rw-r--r--src/pj_mutex.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/pj_mutex.c b/src/pj_mutex.c
index 80898a88..ba1b2def 100644
--- a/src/pj_mutex.c
+++ b/src/pj_mutex.c
@@ -33,6 +33,8 @@
#define _XOPEN_SOURCE 500
#endif
+/* For PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP */
+#define _GNU_SOURCE
#ifndef _WIN32
#include "proj_config.h"
@@ -100,6 +102,9 @@ void pj_cleanup_lock()
#include "pthread.h"
+#ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+static pthread_mutex_t core_lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
+#else
static pthread_mutex_t core_lock;
/************************************************************************/
@@ -122,6 +127,8 @@ static void pj_create_lock()
pthread_mutex_init(&core_lock, &mutex_attr);
}
+#endif /* PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP */
+
/************************************************************************/
/* pj_acquire_lock() */
/* */
@@ -130,11 +137,14 @@ static void pj_create_lock()
void pj_acquire_lock()
{
+
+#ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
static pthread_once_t sOnceKey = PTHREAD_ONCE_INIT;
if( pthread_once(&sOnceKey, pj_create_lock) != 0 )
{
fprintf(stderr, "pthread_once() failed in pj_acquire_lock().\n");
}
+#endif
pthread_mutex_lock( &core_lock);
}