diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/pj_mutex.c | 147 |
1 files changed, 147 insertions, 0 deletions
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 <windows.h> + +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 + |
