From 675cfa5582d96fa600000b88bee251bf26434f2a Mon Sep 17 00:00:00 2001 From: Frank Warmerdam Date: Wed, 23 Sep 2009 19:35:33 +0000 Subject: 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 --- src/pj_gridlist.c | 14 ++++++++++++-- src/pj_mutex.c | 6 +++++- 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'src') 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 + +/* projects.h and windows.h conflict - avoid this! */ #ifndef _WIN32 +#include PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); +#else +#include #endif #ifdef _WIN32 -- cgit v1.2.3