aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFrank Warmerdam <warmerdam@pobox.com>2009-06-17 04:45:38 +0000
committerFrank Warmerdam <warmerdam@pobox.com>2009-06-17 04:45:38 +0000
commitd794f7587d77888400d5080559c3b8dc51599d7e (patch)
tree11574703f40799c5dc791e3456c35557ff2b996f /src
parenta8fa064d5820b5ab9b4dac4bdb002fa1994bb21d (diff)
downloadPROJ-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.c147
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
+