diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/PJ_moll.c | 8 | ||||
| -rw-r--r-- | src/pj_mutex.c | 8 | ||||
| -rw-r--r-- | src/proj_config.h.in | 3 |
3 files changed, 14 insertions, 5 deletions
diff --git a/src/PJ_moll.c b/src/PJ_moll.c index 98f0457d..cf9369dc 100644 --- a/src/PJ_moll.c +++ b/src/PJ_moll.c @@ -29,8 +29,12 @@ FORWARD(s_forward); /* spheroid */ INVERSE(s_inverse); /* spheroid */ lp.phi = aasin(P->ctx, xy.y / P->C_y); lp.lam = xy.x / (P->C_x * cos(lp.phi)); - lp.phi += lp.phi; - lp.phi = aasin(P->ctx, (lp.phi + sin(lp.phi)) / P->C_p); + if (fabs(lp.lam) < PI) { + lp.phi += lp.phi; + lp.phi = aasin(P->ctx, (lp.phi + sin(lp.phi)) / P->C_p); + } else { + lp.lam = lp.phi = HUGE_VAL; + } return (lp); } FREEUP; if (P) pj_dalloc(P); } diff --git a/src/pj_mutex.c b/src/pj_mutex.c index 349537c8..dc484c69 100644 --- a/src/pj_mutex.c +++ b/src/pj_mutex.c @@ -33,7 +33,9 @@ #define _XOPEN_SOURCE 500 #endif + #ifndef _WIN32 +#include "proj_config.h" #include <projects.h> #else #include <proj_api.h> @@ -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; diff --git a/src/proj_config.h.in b/src/proj_config.h.in index 7a8d6943..9e3c7319 100644 --- a/src/proj_config.h.in +++ b/src/proj_config.h.in @@ -21,6 +21,9 @@ /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H +/* Define if your pthreads implementation have PTHREAD_MUTEX_RECURSIVE */ +#undef HAVE_PTHREAD_MUTEX_RECURSIVE + /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H |
