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 --- ChangeLog | 4 ++++ src/pj_gridlist.c | 14 ++++++++++++-- src/pj_mutex.c | 6 +++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index c107c331..d533892e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-09-23 Frank Warmerdam + * src/pj_gridlist.c: Implement mutex protection for grid loader/cacher. + + * src/pj_mutex.c: fix up windows support. + * nad/ntf_r93.gsb: set mime-type to binary so it isn't corrupted on windows systems. 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