diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2018-04-28 12:33:21 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2018-04-28 16:47:53 +0200 |
| commit | 565cceda9bd8970dc76fd6001b7e09ec48267126 (patch) | |
| tree | c2f2268ef453a57668bace60f5c7fd59737549b9 | |
| parent | e36a776dc1070b4878b2b18538366fa369114f37 (diff) | |
| download | PROJ-565cceda9bd8970dc76fd6001b7e09ec48267126.tar.gz PROJ-565cceda9bd8970dc76fd6001b7e09ec48267126.zip | |
pj_mutex.c: use PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP when available
| -rw-r--r-- | src/pj_mutex.c | 10 |
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); } |
