From 937491944292fa3303b565b9bd8914c6b644ab13 Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Thu, 8 Apr 2010 09:15:39 +0200 Subject: Thread-safe xmalloc and xrealloc needs a recursive mutex The mutex used to protect object access (read_mutex) may need to be acquired recursively. Introduce init_recursive_mutex() helper function in thread-utils.c that constructs a mutex with the PHREAD_MUTEX_RECURSIVE attribute. pthread_mutex_init() emulation on Win32 is already recursive as it is implemented on top of the CRITICAL_SECTION type, which is recursive. http://msdn.microsoft.com/en-us/library/ms682530%28VS.85%29.aspx Add do-nothing compatibility wrappers for pthread_mutexattr* functions. Initial-version-by: Fredrik Kuivinen Signed-off-by: Johannes Sixt Signed-off-by: Junio C Hamano --- compat/win32/pthread.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'compat') diff --git a/compat/win32/pthread.h b/compat/win32/pthread.h index c72f100f4..a45f8d66d 100644 --- a/compat/win32/pthread.h +++ b/compat/win32/pthread.h @@ -18,11 +18,17 @@ */ #define pthread_mutex_t CRITICAL_SECTION -#define pthread_mutex_init(a,b) InitializeCriticalSection((a)) +#define pthread_mutex_init(a,b) (InitializeCriticalSection((a)), 0) #define pthread_mutex_destroy(a) DeleteCriticalSection((a)) #define pthread_mutex_lock EnterCriticalSection #define pthread_mutex_unlock LeaveCriticalSection +typedef int pthread_mutexattr_t; +#define pthread_mutexattr_init(a) (*(a) = 0) +#define pthread_mutexattr_destroy(a) do {} while (0) +#define pthread_mutexattr_settype(a, t) 0 +#define PTHREAD_MUTEX_RECURSIVE 0 + /* * Implement simple condition variable for Windows threads, based on ACE * implementation. -- cgit v1.2.1