From 565cceda9bd8970dc76fd6001b7e09ec48267126 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 28 Apr 2018 12:33:21 +0200 Subject: pj_mutex.c: use PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP when available --- src/pj_mutex.c | 10 ++++++++++ 1 file changed, 10 insertions(+) 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); } -- cgit v1.2.3