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 | |
| 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')
| -rw-r--r-- | src/pj_gridlist.c | 14 | ||||
| -rw-r--r-- | src/pj_mutex.c | 6 |
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 |
