diff options
Diffstat (limited to 'src/interfaces/ecpg/include/ecpg-pthread-win32.h')
-rw-r--r-- | src/interfaces/ecpg/include/ecpg-pthread-win32.h | 62 |
1 files changed, 51 insertions, 11 deletions
diff --git a/src/interfaces/ecpg/include/ecpg-pthread-win32.h b/src/interfaces/ecpg/include/ecpg-pthread-win32.h index df076ac8e59..e0bbc93f39f 100644 --- a/src/interfaces/ecpg/include/ecpg-pthread-win32.h +++ b/src/interfaces/ecpg/include/ecpg-pthread-win32.h @@ -1,16 +1,56 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpg-pthread-win32.h,v 1.1 2007/03/29 12:02:24 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpg-pthread-win32.h,v 1.2 2007/09/30 11:38:48 meskes Exp $ */ /* * pthread mapping macros for win32 native thread implementation */ #ifndef _ECPG_PTHREAD_WIN32_H #define _ECPG_PTHREAD_WIN32_H -#define pthread_mutex_lock(x) do { \ - if (*x == INVALID_HANDLE_VALUE) \ - *x = CreateMutex(NULL, FALSE, NULL); \ - WaitForSingleObject(*x, INFINITE); \ -} while (0); -#define pthread_mutex_unlock(x) ReleaseMutex(*x) -#define pthread_getspecific(x) TlsGetValue(x) -#define pthread_setspecific(x,y) TlsSetValue(x,y) -#define pthread_key_create(x,y) *x = TlsAlloc(); -#endif + +#ifdef ENABLE_THREAD_SAFETY + +#ifndef WIN32 + +#include <pthread.h> +#define NON_EXEC_STATIC static + +#else + +#define NON_EXEC_STATIC + +typedef HANDLE pthread_mutex_t; +typedef DWORD pthread_key_t; + +#define PTHREAD_MUTEX_INITIALIZER INVALID_HANDLE_VALUE + +#define pthread_mutex_lock(mutex) \ + WaitForSingleObject(*(mutex), INFINITE); + +#define pthread_mutex_unlock(mutex) \ + ReleaseMutex(*(mutex)) + +#define pthread_getspecific(key) \ + TlsGetValue((key)) + +#define pthread_setspecific(key, value) \ + TlsSetValue((key), (value)) + +/* FIXME: destructor is never called in Win32. */ +#define pthread_key_create(key, destructor) \ + do { *(key) = TlsAlloc(); ((void)(destructor)); } while(0) + +/* init-once functions are always called when libecpg is loaded */ +#define pthread_once(key, fn) \ + ((void)0) + +extern pthread_mutex_t connections_mutex; +extern pthread_mutex_t debug_mutex; +extern pthread_mutex_t debug_init_mutex; +extern void auto_mem_key_init(void); +extern void ecpg_actual_connection_init(void); +extern void ecpg_sqlca_key_init(void); +extern BOOL WINAPI DllMain(HANDLE module, DWORD reason, LPVOID reserved); + +#endif /* WIN32 */ + +#endif /* ENABLE_THREAD_SAFETY */ + +#endif /* _ECPG_PTHREAD_WIN32_H */ |