1 /* $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpg-pthread-win32.h,v 1.3 2007/10/02 09:49:59 meskes Exp $ */
3 * pthread mapping macros for win32 native thread implementation
5 #ifndef _ECPG_PTHREAD_WIN32_H
6 #define _ECPG_PTHREAD_WIN32_H
8 #ifdef ENABLE_THREAD_SAFETY
13 #define NON_EXEC_STATIC static
17 #define NON_EXEC_STATIC
19 typedef HANDLE pthread_mutex_t;
20 typedef DWORD pthread_key_t;
22 #define PTHREAD_MUTEX_INITIALIZER INVALID_HANDLE_VALUE
24 #define pthread_mutex_lock(mutex) \
25 WaitForSingleObject(*(mutex), INFINITE);
27 #define pthread_mutex_unlock(mutex) \
28 ReleaseMutex(*(mutex))
30 #define pthread_getspecific(key) \
33 #define pthread_setspecific(key, value) \
34 TlsSetValue((key), (value))
36 /* FIXME: destructor is never called in Win32. */
37 #define pthread_key_create(key, destructor) \
38 do { *(key) = TlsAlloc(); ((void)(destructor)); } while(0)
40 /* init-once functions are always called when libecpg is loaded */
41 #define pthread_once(key, fn) \
44 extern pthread_mutex_t connections_mutex;
45 extern pthread_mutex_t debug_mutex;
46 extern pthread_mutex_t debug_init_mutex;
47 extern void auto_mem_key_init(void);
48 extern void ecpg_actual_connection_init(void);
49 extern void ecpg_sqlca_key_init(void);
50 extern void descriptor_key_init(void);
51 extern BOOL WINAPI DllMain(HANDLE module, DWORD reason, LPVOID reserved);
55 #endif /* ENABLE_THREAD_SAFETY */
57 #endif /* _ECPG_PTHREAD_WIN32_H */