From d794f7587d77888400d5080559c3b8dc51599d7e Mon Sep 17 00:00:00 2001 From: Frank Warmerdam Date: Wed, 17 Jun 2009 04:45:38 +0000 Subject: preliminary win32/pthread mutex implementation git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@1594 4e78687f-474d-0410-85f9-8d5e500ac6b2 --- ChangeLog | 6 +++ src/pj_mutex.c | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) diff --git a/ChangeLog b/ChangeLog index f5777ac7..65655441 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-06-17 Frank Warmerdam + + * src/pj_mutex.c: Implement win32 and pthread mutex support. + + * configure, src/Makefile.am: add --without-mutex support to configure + 2009-06-16 Frank Warmerdam * README: Update windows build instructions (#30). diff --git a/src/pj_mutex.c b/src/pj_mutex.c index f988e1c3..54a44d0e 100644 --- a/src/pj_mutex.c +++ b/src/pj_mutex.c @@ -31,6 +31,18 @@ PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); +#if !defined(MUTEX_stub) && !defined(MUTEX_pthread) && !defined(MUTEX_win32) +# define MUTEX_stub +#endif + +/************************************************************************/ +/* ==================================================================== */ +/* stub mutex implementation */ +/* ==================================================================== */ +/************************************************************************/ + +#ifdef MUTEX_stub + /************************************************************************/ /* pj_acquire_lock() */ /* */ @@ -51,3 +63,138 @@ void pj_release_lock() { } +/************************************************************************/ +/* pj_cleanup_lock() */ +/************************************************************************/ +void pj_cleanup_lock() +{ +} + +/************************************************************************/ +/* pj_init_lock() */ +/************************************************************************/ + +void pj_init_lock() + +{ +} + +#endif // def MUTEX_stub + +/************************************************************************/ +/* ==================================================================== */ +/* pthread mutex implementation */ +/* ==================================================================== */ +/************************************************************************/ + +#ifdef MUTEX_pthread + +#include "pthread.h" + +static pthread_mutex_t core_lock = PTHREAD_MUTEX_INITIALIZER; + +/************************************************************************/ +/* pj_acquire_lock() */ +/* */ +/* Acquire the PROJ.4 lock. */ +/************************************************************************/ + +void pj_acquire_lock() +{ + pthread_mutex_lock( &core_lock); +} + +/************************************************************************/ +/* pj_release_lock() */ +/* */ +/* Release the PROJ.4 lock. */ +/************************************************************************/ + +void pj_release_lock() +{ + pthread_mutex_unlock( &core_lock ); +} + +/************************************************************************/ +/* pj_cleanup_lock() */ +/************************************************************************/ +void pj_cleanup_lock() +{ +} + +/************************************************************************/ +/* pj_init_lock() */ +/************************************************************************/ + +void pj_init_lock() + +{ +} + +#endif // def MUTEX_pthread + +/************************************************************************/ +/* ==================================================================== */ +/* win32 mutex implementation */ +/* ==================================================================== */ +/************************************************************************/ + +#ifdef MUTEX_win32 + +#include + +static HANDLE mutex_lock = NULL; + +/************************************************************************/ +/* pj_acquire_lock() */ +/* */ +/* Acquire the PROJ.4 lock. */ +/************************************************************************/ + +void pj_acquire_lock() +{ + if( mutex_lock == NULL ) + pj_init_lock(); + + WaitForSingleObject( mutex_lock, INFINITE ); +} + +/************************************************************************/ +/* pj_release_lock() */ +/* */ +/* Release the PROJ.4 lock. */ +/************************************************************************/ + +void pj_release_lock() +{ + if( mutex_lock == NULL ) + pj_init_lock(); + + ReleaseMutex( mutex_lock ); +} + +/************************************************************************/ +/* pj_cleanup_lock() */ +/************************************************************************/ +void pj_cleanup_lock() +{ + if( mutex_lock != NULL ) + { + CloseHandle( mutex_lock ); + mutex_lock = NULL; + } +} + +/************************************************************************/ +/* pj_init_lock() */ +/************************************************************************/ + +void pj_init_lock() + +{ + if( mutex_lock == NULL ) + mutex_lock = CreateMutex( NULL, TRUE, NULL ); +} + +#endif // def MUTEX_pthread + -- cgit v1.2.3