]> granicus.if.org Git - postgresql/blob - src/interfaces/ecpg/include/ecpg-pthread-win32.h
ITAGAKI Takahiro <itagaki.takahiro@oss.ntt.co.jp> added thread-safe
[postgresql] / src / interfaces / ecpg / include / ecpg-pthread-win32.h
1 /* $PostgreSQL: pgsql/src/interfaces/ecpg/include/ecpg-pthread-win32.h,v 1.3 2007/10/02 09:49:59 meskes Exp $ */
2 /*
3  * pthread mapping macros for win32 native thread implementation
4  */
5 #ifndef _ECPG_PTHREAD_WIN32_H
6 #define _ECPG_PTHREAD_WIN32_H
7
8 #ifdef ENABLE_THREAD_SAFETY
9
10 #ifndef WIN32
11
12 #include <pthread.h>
13 #define NON_EXEC_STATIC         static
14
15 #else
16
17 #define NON_EXEC_STATIC
18
19 typedef HANDLE          pthread_mutex_t;
20 typedef DWORD           pthread_key_t;
21
22 #define PTHREAD_MUTEX_INITIALIZER       INVALID_HANDLE_VALUE
23
24 #define pthread_mutex_lock(mutex) \
25         WaitForSingleObject(*(mutex), INFINITE);
26
27 #define pthread_mutex_unlock(mutex) \
28         ReleaseMutex(*(mutex))
29
30 #define pthread_getspecific(key) \
31         TlsGetValue((key))
32
33 #define pthread_setspecific(key, value) \
34         TlsSetValue((key), (value))
35
36 /* FIXME: destructor is never called in Win32. */
37 #define pthread_key_create(key, destructor) \
38         do { *(key) = TlsAlloc(); ((void)(destructor)); } while(0)
39
40 /* init-once functions are always called when libecpg is loaded */
41 #define pthread_once(key, fn) \
42         ((void)0)
43
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);
52
53 #endif  /* WIN32 */
54
55 #endif  /* ENABLE_THREAD_SAFETY */
56
57 #endif  /* _ECPG_PTHREAD_WIN32_H */