aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/PJ_moll.c8
-rw-r--r--src/pj_mutex.c8
-rw-r--r--src/proj_config.h.in3
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