diff options
| author | Frank Warmerdam <warmerdam@pobox.com> | 2009-09-23 19:35:33 +0000 |
|---|---|---|
| committer | Frank Warmerdam <warmerdam@pobox.com> | 2009-09-23 19:35:33 +0000 |
| commit | 675cfa5582d96fa600000b88bee251bf26434f2a (patch) | |
| tree | 23bf937cd3bb1e1a9ae7fd4d4c927325566dda34 /src/pj_gridlist.c | |
| parent | 474e11f0b26079cc490dfedce40bd25fcaabb32c (diff) | |
| download | PROJ-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.c | 14 |
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; + } } |
