aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFrank Warmerdam <warmerdam@pobox.com>2009-09-23 19:35:33 +0000
committerFrank Warmerdam <warmerdam@pobox.com>2009-09-23 19:35:33 +0000
commit675cfa5582d96fa600000b88bee251bf26434f2a (patch)
tree23bf937cd3bb1e1a9ae7fd4d4c927325566dda34 /src
parent474e11f0b26079cc490dfedce40bd25fcaabb32c (diff)
downloadPROJ-675cfa5582d96fa600000b88bee251bf26434f2a.tar.gz
PROJ-675cfa5582d96fa600000b88bee251bf26434f2a.zip
implement mutex locking for loading/caching grid shift files
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@1626 4e78687f-474d-0410-85f9-8d5e500ac6b2
Diffstat (limited to 'src')
-rw-r--r--src/pj_gridlist.c14
-rw-r--r--src/pj_mutex.c6
2 files changed, 17 insertions, 3 deletions
diff --git a/src/pj_gridlist.c b/src/pj_gridlist.c
index a8cdf711..2d3700e7 100644
--- a/src/pj_gridlist.c
+++ b/src/pj_gridlist.c
@@ -182,6 +182,7 @@ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count)
pj_errno = 0;
*grid_count = 0;
+ pj_acquire_lock();
if( last_nadgrids != NULL
&& strcmp(nadgrids,last_nadgrids) == 0 )
{
@@ -189,7 +190,9 @@ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count)
if( *grid_count == 0 )
pj_errno = -38;
- return last_nadgrids_list;
+ PJ_GRIDINFO **ret = last_nadgrids_list;
+ pj_release_lock();
+ return ret;
}
/* -------------------------------------------------------------------- */
@@ -227,6 +230,7 @@ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count)
if( end_char > sizeof(name) )
{
pj_errno = -38;
+ pj_release_lock();
return NULL;
}
@@ -240,6 +244,7 @@ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count)
if( !pj_gridlist_merge_gridfile( name ) && required )
{
pj_errno = -38;
+ pj_release_lock();
return NULL;
}
else
@@ -249,8 +254,13 @@ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count)
if( last_nadgrids_count > 0 )
{
*grid_count = last_nadgrids_count;
- return last_nadgrids_list;
+ PJ_GRIDINFO **ret = last_nadgrids_list;
+ pj_release_lock();
+ return ret;
}
else
+ {
+ pj_release_lock();
return NULL;
+ }
}
diff --git a/src/pj_mutex.c b/src/pj_mutex.c
index b3e4e8ee..60d6fc74 100644
--- a/src/pj_mutex.c
+++ b/src/pj_mutex.c
@@ -27,10 +27,14 @@
* DEALINGS IN THE SOFTWARE.
*****************************************************************************/
-#include <proj_api.h>
+
+/* projects.h and windows.h conflict - avoid this! */
#ifndef _WIN32
+#include <projects.h>
PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $");
+#else
+#include <proj_api.h>
#endif
#ifdef _WIN32