diff options
| author | Frank Warmerdam <warmerdam@pobox.com> | 2009-06-17 04:45:38 +0000 |
|---|---|---|
| committer | Frank Warmerdam <warmerdam@pobox.com> | 2009-06-17 04:45:38 +0000 |
| commit | d794f7587d77888400d5080559c3b8dc51599d7e (patch) | |
| tree | 11574703f40799c5dc791e3456c35557ff2b996f /src | |
| parent | a8fa064d5820b5ab9b4dac4bdb002fa1994bb21d (diff) | |
| download | PROJ-d794f7587d77888400d5080559c3b8dc51599d7e.tar.gz PROJ-d794f7587d77888400d5080559c3b8dc51599d7e.zip | |
preliminary win32/pthread mutex implementation
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@1594 4e78687f-474d-0410-85f9-8d5e500ac6b2
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 + |
