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 --- src/pj_mutex.c | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) (limited to 'src') 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