1
0
mirror of https://github.com/postgres/postgres.git synced 2025-09-02 04:21:28 +03:00

Hopefully fixed some stuff that causes Windows builds to fail.

This commit is contained in:
Michael Meskes
2007-10-03 08:55:23 +00:00
parent 6d673a63ed
commit c4a6c2f871
9 changed files with 70 additions and 61 deletions

View File

@@ -1,4 +1,4 @@
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.45 2007/10/02 09:49:59 meskes Exp $ */
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.46 2007/10/03 08:55:22 meskes Exp $ */
#define POSTGRES_ECPG_INTERNAL
#include "postgres_fe.h"
@@ -11,17 +11,15 @@
#include "sqlca.h"
#ifdef ENABLE_THREAD_SAFETY
NON_EXEC_STATIC pthread_mutex_t connections_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t connections_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_key_t actual_connection_key;
#ifndef WIN32
static pthread_once_t actual_connection_key_once = PTHREAD_ONCE_INIT;
#endif
#endif
static struct connection *actual_connection = NULL;
static struct connection *all_connections = NULL;
#ifdef ENABLE_THREAD_SAFETY
NON_EXEC_STATIC void
static void
ecpg_actual_connection_init(void)
{
pthread_key_create(&actual_connection_key, NULL);
@@ -447,7 +445,6 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
this->cache_head = NULL;
this->prep_stmts = NULL;
this->descriptors = NULL;
if (all_connections == NULL)
this->next = NULL;

View File

@@ -1,6 +1,6 @@
/* dynamic SQL support routines
*
* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.24 2007/10/02 09:49:59 meskes Exp $
* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.25 2007/10/03 08:55:22 meskes Exp $
*/
#define POSTGRES_ECPG_INTERNAL
@@ -21,9 +21,7 @@ static void descriptor_deallocate_all(struct descriptor *list);
/* We manage descriptors separately for each thread. */
#ifdef ENABLE_THREAD_SAFETY
static pthread_key_t descriptor_key;
#ifndef WIN32
static pthread_once_t descriptor_once = PTHREAD_ONCE_INIT;
#endif
static void
descriptor_destructor(void *arg)
@@ -31,7 +29,7 @@ descriptor_destructor(void *arg)
descriptor_deallocate_all(arg);
}
NON_EXEC_STATIC void
static void
descriptor_key_init(void)
{
pthread_key_create(&descriptor_key, descriptor_destructor);

View File

@@ -1,4 +1,4 @@
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/extern.h,v 1.29 2007/10/02 09:49:59 meskes Exp $ */
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/extern.h,v 1.30 2007/10/03 08:55:22 meskes Exp $ */
#ifndef _ECPG_LIB_EXTERN_H
#define _ECPG_LIB_EXTERN_H
@@ -36,8 +36,6 @@ bool ECPGget_data(const PGresult *, int, int, int, enum ECPGttype type,
#ifdef ENABLE_THREAD_SAFETY
void ecpg_pthreads_init(void);
#else
#define ecpg_pthreads_init() ((void)0)
#endif
struct connection *ECPGget_connection(const char *);
char *ECPGalloc(long, int);
@@ -94,7 +92,6 @@ struct connection
int autocommit;
struct ECPGtype_information_cache *cache_head;
struct prepared_statement *prep_stmts;
struct descriptor *descriptors;
struct connection *next;
};

View File

@@ -1,4 +1,4 @@
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/memory.c,v 1.9 2007/09/30 11:38:48 meskes Exp $ */
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/memory.c,v 1.10 2007/10/03 08:55:22 meskes Exp $ */
#define POSTGRES_ECPG_INTERNAL
#include "postgres_fe.h"
@@ -70,9 +70,7 @@ struct auto_mem
#ifdef ENABLE_THREAD_SAFETY
static pthread_key_t auto_mem_key;
#ifndef WIN32
static pthread_once_t auto_mem_once = PTHREAD_ONCE_INIT;
#endif
static void
auto_mem_destructor(void *arg)
@@ -80,7 +78,7 @@ auto_mem_destructor(void *arg)
ECPGfree_auto_mem();
}
NON_EXEC_STATIC void
static void
auto_mem_key_init(void)
{
pthread_key_create(&auto_mem_key, auto_mem_destructor);

View File

@@ -1,4 +1,4 @@
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/misc.c,v 1.38 2007/10/02 09:49:59 meskes Exp $ */
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/misc.c,v 1.39 2007/10/03 08:55:22 meskes Exp $ */
#define POSTGRES_ECPG_INTERNAL
#include "postgres_fe.h"
@@ -57,9 +57,7 @@ static struct sqlca_t sqlca_init =
#ifdef ENABLE_THREAD_SAFETY
static pthread_key_t sqlca_key;
#ifndef WIN32
static pthread_once_t sqlca_key_once = PTHREAD_ONCE_INIT;
#endif
#else
static struct sqlca_t sqlca =
{
@@ -90,8 +88,8 @@ static struct sqlca_t sqlca =
#endif
#ifdef ENABLE_THREAD_SAFETY
NON_EXEC_STATIC pthread_mutex_t debug_mutex = PTHREAD_MUTEX_INITIALIZER;
NON_EXEC_STATIC pthread_mutex_t debug_init_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t debug_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t debug_init_mutex = PTHREAD_MUTEX_INITIALIZER;
#endif
static int simple_debug = 0;
static FILE *debugstream = NULL;
@@ -125,7 +123,7 @@ ecpg_sqlca_key_destructor(void *arg)
free(arg); /* sqlca structure allocated in ECPGget_sqlca */
}
NON_EXEC_STATIC void
static void
ecpg_sqlca_key_init(void)
{
pthread_key_create(&sqlca_key, ecpg_sqlca_key_destructor);
@@ -415,24 +413,37 @@ ECPGis_noind_null(enum ECPGttype type, void *ptr)
}
#ifdef WIN32
#ifdef ENABLE_THREAD_SAFETY
/*
* Initialize mutexes and call init-once functions on loading.
*/
BOOL WINAPI
DllMain(HANDLE module, DWORD reason, LPVOID reserved)
void
win32_pthread_mutex(volatile pthread_mutex_t *mutex)
{
if (reason == DLL_PROCESS_ATTACH)
if (mutex->handle == NULL)
{
connections_mutex = CreateMutex(NULL, FALSE, NULL);
debug_mutex = CreateMutex(NULL, FALSE, NULL);
debug_init_mutex = CreateMutex(NULL, FALSE, NULL);
auto_mem_key_init();
ecpg_actual_connection_init();
ecpg_sqlca_key_init();
descriptor_key_init();
while (InterlockedExchange((LONG *)&mutex->initlock, 1) == 1)
Sleep(0);
if (mutex->handle == NULL)
mutex->handle = CreateMutex(NULL, FALSE, NULL);
InterlockedExchange((LONG *)&mutex->initlock, 0);
}
return TRUE;
}
#endif
static pthread_mutex_t win32_pthread_once_lock = PTHREAD_MUTEX_INITIALIZER;
void
win32_pthread_once(volatile pthread_once_t *once, void (*fn)(void))
{
if (!*once)
{
pthread_mutex_lock(&win32_pthread_once_lock);
if (!*once)
{
*once = true;
fn();
}
pthread_mutex_unlock(&win32_pthread_once_lock);
}
}
#endif /* ENABLE_THREAD_SAFETY */
#endif /* WIN32 */