Index: connect.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v retrieving revision 1.39 diff -u -r1.39 connect.c --- connect.c 12 Jan 2007 10:00:12 -0000 1.39 +++ connect.c 14 Mar 2007 12:47:48 -0000 @@ -4,7 +4,11 @@ #include "postgres_fe.h" #ifdef ENABLE_THREAD_SAFETY +#ifndef WIN32 #include +#else +#include "ecpg-pthread-win32.h" +#endif #endif #include "ecpgtype.h" #include "ecpglib.h" @@ -13,9 +17,14 @@ #include "sqlca.h" #ifdef ENABLE_THREAD_SAFETY +#ifndef WIN32 static pthread_mutex_t connections_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_key_t actual_connection_key; static pthread_once_t actual_connection_key_once = PTHREAD_ONCE_INIT; +#else +static HANDLE connections_mutex = INVALID_HANDLE_VALUE; +static DWORD actual_connection_key; +#endif /* WIN32 */ #endif static struct connection *actual_connection = NULL; static struct connection *all_connections = NULL; @@ -30,7 +39,13 @@ void ecpg_pthreads_init(void) { +#ifndef WIN32 pthread_once(&actual_connection_key_once, ecpg_actual_connection_init); +#else + static long has_run = 0; + if (InterlockedCompareExchange(&has_run, 1, 0) == 0) + ecpg_actual_connection_init(); +#endif } #endif Index: misc.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/interfaces/ecpg/ecpglib/misc.c,v retrieving revision 1.34 diff -u -r1.34 misc.c --- misc.c 12 Jan 2007 10:00:13 -0000 1.34 +++ misc.c 14 Mar 2007 12:48:03 -0000 @@ -6,7 +6,11 @@ #include #include #ifdef ENABLE_THREAD_SAFETY +#ifndef WIN32 #include +#else +#include "ecpg-pthread-win32.h" +#endif #endif #include "ecpgtype.h" #include "ecpglib.h" @@ -58,9 +62,13 @@ }; #ifdef ENABLE_THREAD_SAFETY +#ifndef WIN32 static pthread_key_t sqlca_key; static pthread_once_t sqlca_key_once = PTHREAD_ONCE_INIT; #else +static DWORD sqlca_key; +#endif +#else static struct sqlca_t sqlca = { { @@ -90,8 +98,13 @@ #endif #ifdef ENABLE_THREAD_SAFETY +#ifndef WIN32 static pthread_mutex_t debug_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t debug_init_mutex = PTHREAD_MUTEX_INITIALIZER; +#else +static HANDLE debug_mutex = INVALID_HANDLE_VALUE; +static HANDLE debug_init_mutex = INVALID_HANDLE_VALUE; +#endif /* WIN32 */ #endif static int simple_debug = 0; static FILE *debugstream = NULL; @@ -138,8 +151,13 @@ { #ifdef ENABLE_THREAD_SAFETY struct sqlca_t *sqlca; - +#ifdef WIN32 + static long has_run = 0; + if (InterlockedCompareExchange(&has_run, 1, 0) == 0) + ecpg_sqlca_key_init(); +#else pthread_once(&sqlca_key_once, ecpg_sqlca_key_init); +#endif sqlca = pthread_getspecific(sqlca_key); if (sqlca == NULL)