aboutsummaryrefslogtreecommitdiff
path: root/src/pj_gridlist.c
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/pj_gridlist.c
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/pj_gridlist.c')
-rw-r--r--src/pj_gridlist.c14
1 files changed, 12 insertions, 2 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;
+ }
}