1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-28 18:48:04 +03:00

Remove --disable-thread-safety and related code.

All supported computers have either POSIX or Windows threads, and we no
longer have any automated testing of --disable-thread-safety.  We define
a vestigial ENABLE_THREAD_SAFETY macro to 1 in ecpg_config.h in case it
is useful, but we no longer test it anywhere in PostgreSQL code, and
associated dead code paths are removed.

The Meson and perl-based Windows build scripts never had an equivalent
build option.

Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi>
Discussion: https://postgr.es/m/CA%2BhUKGLtmexrpMtxBRLCVePqV_dtWG-ZsEbyPrYc%2BNBB2TkNsw%40mail.gmail.com
This commit is contained in:
Thomas Munro
2023-07-12 06:20:37 +12:00
parent 11f3669409
commit 68a4b58eca
38 changed files with 137 additions and 509 deletions

View File

@@ -14,15 +14,12 @@
locale_t ecpg_clocale = (locale_t) 0;
#endif
#ifdef ENABLE_THREAD_SAFETY
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;
#endif
static struct connection *actual_connection = NULL;
static struct connection *all_connections = NULL;
#ifdef ENABLE_THREAD_SAFETY
static void
ecpg_actual_connection_init(void)
{
@@ -34,7 +31,6 @@ ecpg_pthreads_init(void)
{
pthread_once(&actual_connection_key_once, ecpg_actual_connection_init);
}
#endif
static struct connection *
ecpg_get_connection_nr(const char *connection_name)
@@ -43,7 +39,6 @@ ecpg_get_connection_nr(const char *connection_name)
if ((connection_name == NULL) || (strcmp(connection_name, "CURRENT") == 0))
{
#ifdef ENABLE_THREAD_SAFETY
ecpg_pthreads_init(); /* ensure actual_connection_key is valid */
ret = pthread_getspecific(actual_connection_key);
@@ -56,9 +51,6 @@ ecpg_get_connection_nr(const char *connection_name)
if (ret == NULL)
/* no TSD connection, going for global */
ret = actual_connection;
#else
ret = actual_connection;
#endif
}
else
{
@@ -82,7 +74,6 @@ ecpg_get_connection(const char *connection_name)
if ((connection_name == NULL) || (strcmp(connection_name, "CURRENT") == 0))
{
#ifdef ENABLE_THREAD_SAFETY
ecpg_pthreads_init(); /* ensure actual_connection_key is valid */
ret = pthread_getspecific(actual_connection_key);
@@ -95,21 +86,14 @@ ecpg_get_connection(const char *connection_name)
if (ret == NULL)
/* no TSD connection here either, using global */
ret = actual_connection;
#else
ret = actual_connection;
#endif
}
else
{
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_lock(&connections_mutex);
#endif
ret = ecpg_get_connection_nr(connection_name);
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_unlock(&connections_mutex);
#endif
}
return ret;
@@ -143,10 +127,8 @@ ecpg_finish(struct connection *act)
con->next = act->next;
}
#ifdef ENABLE_THREAD_SAFETY
if (pthread_getspecific(actual_connection_key) == act)
pthread_setspecific(actual_connection_key, all_connections);
#endif
if (actual_connection == act)
actual_connection = all_connections;
@@ -212,11 +194,7 @@ ECPGsetconn(int lineno, const char *connection_name)
if (!ecpg_init(con, connection_name, lineno))
return false;
#ifdef ENABLE_THREAD_SAFETY
pthread_setspecific(actual_connection_key, con);
#else
actual_connection = con;
#endif
return true;
}
@@ -326,9 +304,7 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
if (dbname == NULL && connection_name == NULL)
connection_name = "DEFAULT";
#if ENABLE_THREAD_SAFETY
ecpg_pthreads_init();
#endif
/* check if the identifier is unique */
if (ecpg_get_connection(connection_name))
@@ -505,9 +481,7 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
}
/* add connection to our list */
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_lock(&connections_mutex);
#endif
/*
* ... but first, make certain we have created ecpg_clocale. Rely on
@@ -519,9 +493,7 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
ecpg_clocale = newlocale(LC_NUMERIC_MASK, "C", (locale_t) 0);
if (!ecpg_clocale)
{
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_unlock(&connections_mutex);
#endif
ecpg_raise(lineno, ECPG_OUT_OF_MEMORY,
ECPG_SQLSTATE_ECPG_OUT_OF_MEMORY, NULL);
if (host)
@@ -558,9 +530,7 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
this->next = all_connections;
all_connections = this;
#ifdef ENABLE_THREAD_SAFETY
pthread_setspecific(actual_connection_key, all_connections);
#endif
actual_connection = all_connections;
ecpg_log("ECPGconnect: opening database %s on %s port %s %s%s %s%s\n",
@@ -678,9 +648,7 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
ecpg_log("ECPGconnect: %s", errmsg);
ecpg_finish(this);
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_unlock(&connections_mutex);
#endif
ecpg_raise(lineno, ECPG_CONNECT, ECPG_SQLSTATE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION, db);
if (realname)
@@ -692,9 +660,7 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
if (realname)
ecpg_free(realname);
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_unlock(&connections_mutex);
#endif
this->autocommit = autocommit;
@@ -716,9 +682,7 @@ ECPGdisconnect(int lineno, const char *connection_name)
return false;
}
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_lock(&connections_mutex);
#endif
if (strcmp(connection_name, "ALL") == 0)
{
@@ -737,18 +701,14 @@ ECPGdisconnect(int lineno, const char *connection_name)
if (!ecpg_init(con, connection_name, lineno))
{
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_unlock(&connections_mutex);
#endif
return false;
}
else
ecpg_finish(con);
}
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_unlock(&connections_mutex);
#endif
return true;
}

View File

@@ -19,7 +19,6 @@
static void descriptor_free(struct descriptor *desc);
/* We manage descriptors separately for each thread. */
#ifdef ENABLE_THREAD_SAFETY
static pthread_key_t descriptor_key;
static pthread_once_t descriptor_once = PTHREAD_ONCE_INIT;
@@ -49,12 +48,6 @@ set_descriptors(struct descriptor *value)
{
pthread_setspecific(descriptor_key, value);
}
#else
static struct descriptor *all_descriptors = NULL;
#define get_descriptors() (all_descriptors)
#define set_descriptors(value) do { all_descriptors = (value); } while(0)
#endif
/* old internal convenience function that might go away later */
static PGresult *
@@ -782,8 +775,6 @@ ECPGdeallocate_desc(int line, const char *name)
return false;
}
#ifdef ENABLE_THREAD_SAFETY
/* Deallocate all descriptors in the list */
static void
descriptor_deallocate_all(struct descriptor *list)
@@ -796,7 +787,6 @@ descriptor_deallocate_all(struct descriptor *list)
list = next;
}
}
#endif /* ENABLE_THREAD_SAFETY */
bool
ECPGallocate_desc(int line, const char *name)

View File

@@ -169,9 +169,7 @@ bool ecpg_get_data(const PGresult *, int, int, int, enum ECPGttype type,
enum ECPGttype, char *, char *, long, long, long,
enum ARRAY_TYPE, enum COMPAT_MODE, bool);
#ifdef ENABLE_THREAD_SAFETY
void ecpg_pthreads_init(void);
#endif
struct connection *ecpg_get_connection(const char *connection_name);
char *ecpg_alloc(long size, int lineno);
char *ecpg_auto_alloc(long size, int lineno);

View File

@@ -1961,9 +1961,7 @@ ecpg_do_prologue(int lineno, const int compat, const int force_indicator,
return false;
}
#ifdef ENABLE_THREAD_SAFETY
ecpg_pthreads_init();
#endif
con = ecpg_get_connection(connection_name);

View File

@@ -68,7 +68,6 @@ struct auto_mem
struct auto_mem *next;
};
#ifdef ENABLE_THREAD_SAFETY
static pthread_key_t auto_mem_key;
static pthread_once_t auto_mem_once = PTHREAD_ONCE_INIT;
@@ -97,12 +96,6 @@ set_auto_allocs(struct auto_mem *am)
{
pthread_setspecific(auto_mem_key, am);
}
#else
static struct auto_mem *auto_allocs = NULL;
#define get_auto_allocs() (auto_allocs)
#define set_auto_allocs(am) do { auto_allocs = (am); } while(0)
#endif
char *
ecpg_auto_alloc(long size, int lineno)

View File

@@ -55,42 +55,11 @@ static struct sqlca_t sqlca_init =
}
};
#ifdef ENABLE_THREAD_SAFETY
static pthread_key_t sqlca_key;
static pthread_once_t sqlca_key_once = PTHREAD_ONCE_INIT;
#else
static struct sqlca_t sqlca =
{
{
'S', 'Q', 'L', 'C', 'A', ' ', ' ', ' '
},
sizeof(struct sqlca_t),
0,
{
0,
{
0
}
},
{
'N', 'O', 'T', ' ', 'S', 'E', 'T', ' '
},
{
0, 0, 0, 0, 0, 0
},
{
0, 0, 0, 0, 0, 0, 0, 0
},
{
'0', '0', '0', '0', '0'
}
};
#endif
#ifdef ENABLE_THREAD_SAFETY
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;
@@ -123,7 +92,6 @@ ecpg_init(const struct connection *con, const char *connection_name, const int l
return true;
}
#ifdef ENABLE_THREAD_SAFETY
static void
ecpg_sqlca_key_destructor(void *arg)
{
@@ -135,12 +103,10 @@ ecpg_sqlca_key_init(void)
{
pthread_key_create(&sqlca_key, ecpg_sqlca_key_destructor);
}
#endif
struct sqlca_t *
ECPGget_sqlca(void)
{
#ifdef ENABLE_THREAD_SAFETY
struct sqlca_t *sqlca;
pthread_once(&sqlca_key_once, ecpg_sqlca_key_init);
@@ -155,9 +121,6 @@ ECPGget_sqlca(void)
pthread_setspecific(sqlca_key, sqlca);
}
return sqlca;
#else
return &sqlca;
#endif
}
bool
@@ -240,9 +203,7 @@ ECPGtrans(int lineno, const char *connection_name, const char *transaction)
void
ECPGdebug(int n, FILE *dbgs)
{
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_lock(&debug_init_mutex);
#endif
if (n > 100)
{
@@ -256,9 +217,7 @@ ECPGdebug(int n, FILE *dbgs)
ecpg_log("ECPGdebug: set to %d\n", simple_debug);
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_unlock(&debug_init_mutex);
#endif
}
void
@@ -290,9 +249,7 @@ ecpg_log(const char *format,...)
else
snprintf(fmt, bufsize, "[%d]: %s", (int) getpid(), intl_format);
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_lock(&debug_mutex);
#endif
va_start(ap, format);
vfprintf(debugstream, fmt, ap);
@@ -307,9 +264,7 @@ ecpg_log(const char *format,...)
fflush(debugstream);
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_unlock(&debug_mutex);
#endif
free(fmt);
}
@@ -451,7 +406,6 @@ ECPGis_noind_null(enum ECPGttype type, const void *ptr)
}
#ifdef WIN32
#ifdef ENABLE_THREAD_SAFETY
void
win32_pthread_mutex(volatile pthread_mutex_t *mutex)
@@ -482,7 +436,6 @@ win32_pthread_once(volatile pthread_once_t *once, void (*fn) (void))
pthread_mutex_unlock(&win32_pthread_once_lock);
}
}
#endif /* ENABLE_THREAD_SAFETY */
#endif /* WIN32 */
#ifdef ENABLE_NLS

View File

@@ -5,8 +5,6 @@
#ifndef _ECPG_PTHREAD_WIN32_H
#define _ECPG_PTHREAD_WIN32_H
#ifdef ENABLE_THREAD_SAFETY
#ifndef WIN32
#include <pthread.h>
@@ -53,6 +51,5 @@ void win32_pthread_once(volatile pthread_once_t *once, void (*fn) (void));
win32_pthread_once((once), (fn)); \
} while(0)
#endif /* WIN32 */
#endif /* ENABLE_THREAD_SAFETY */
#endif /* _ECPG_PTHREAD_WIN32_H */

View File

@@ -1,6 +1,5 @@
/* Define to 1 to build client libraries as thread-safe code.
* (--enable-thread-safety) */
#undef ENABLE_THREAD_SAFETY
/* Define to 1 to build client libraries as thread-safe code. */
#define ENABLE_THREAD_SAFETY 1
/* Define to 1 if the system has the type `int64'. */
#undef HAVE_INT64

View File

@@ -98,9 +98,7 @@ void *ECPGget_var(int number);
/* dynamic result allocation */
void ECPGfree_auto_mem(void);
#ifdef ENABLE_THREAD_SAFETY
void ecpg_pthreads_init(void);
#endif
#ifdef __cplusplus
}

View File

@@ -3,7 +3,6 @@
ecpg_inc = include_directories('.')
ecpg_conf_keys = [
'ENABLE_THREAD_SAFETY',
'HAVE_INT64',
'HAVE_LONG_INT_64',
'HAVE_LONG_LONG_INT_64',
@@ -12,6 +11,8 @@ ecpg_conf_keys = [
ecpg_conf_data = configuration_data()
ecpg_conf_data.set('ENABLE_THREAD_SAFETY', 1)
foreach key : ecpg_conf_keys
if cdata.has(key)
ecpg_conf_data.set(key, cdata.get(key))

View File

@@ -11,14 +11,6 @@
#include <stdlib.h>
#include "ecpg_config.h"
#ifndef ENABLE_THREAD_SAFETY
int
main(void)
{
printf("No threading enabled.\n");
return 0;
}
#else
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
@@ -101,7 +93,7 @@ struct sqlca_t *ECPGget_sqlca(void);
#endif
#line 26 "alloc.pgc"
#line 18 "alloc.pgc"
#line 1 "regression.h"
@@ -111,14 +103,14 @@ struct sqlca_t *ECPGget_sqlca(void);
#line 27 "alloc.pgc"
#line 19 "alloc.pgc"
/* exec sql whenever sqlerror sqlprint ; */
#line 29 "alloc.pgc"
#line 21 "alloc.pgc"
/* exec sql whenever not found sqlprint ; */
#line 30 "alloc.pgc"
#line 22 "alloc.pgc"
#ifdef WIN32
@@ -134,54 +126,54 @@ static void* fn(void* arg)
#line 41 "alloc.pgc"
#line 33 "alloc.pgc"
int value ;
#line 42 "alloc.pgc"
#line 34 "alloc.pgc"
char name [ 100 ] ;
#line 43 "alloc.pgc"
#line 35 "alloc.pgc"
char ** r = NULL ;
/* exec sql end declare section */
#line 44 "alloc.pgc"
#line 36 "alloc.pgc"
value = (intptr_t) arg;
sprintf(name, "Connection: %d", value);
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , name, 0);
#line 49 "alloc.pgc"
#line 41 "alloc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 49 "alloc.pgc"
#line 41 "alloc.pgc"
{ ECPGsetcommit(__LINE__, "on", NULL);
#line 50 "alloc.pgc"
#line 42 "alloc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 50 "alloc.pgc"
#line 42 "alloc.pgc"
for (i = 1; i <= REPEATS; ++i)
{
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select relname from pg_class where relname = 'pg_class'", ECPGt_EOIT,
ECPGt_char,&(r),(long)0,(long)0,(1)*sizeof(char),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 53 "alloc.pgc"
#line 45 "alloc.pgc"
if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint();
#line 53 "alloc.pgc"
#line 45 "alloc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 53 "alloc.pgc"
#line 45 "alloc.pgc"
free(r);
r = NULL;
}
{ ECPGdisconnect(__LINE__, name);
#line 57 "alloc.pgc"
#line 49 "alloc.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 57 "alloc.pgc"
#line 49 "alloc.pgc"
return 0;
@@ -215,4 +207,3 @@ int main ()
return 0;
}
#endif

View File

@@ -7,7 +7,6 @@
#define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))
#line 1 "descriptor.pgc"
#ifdef ENABLE_THREAD_SAFETY
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
@@ -16,7 +15,6 @@
#else
#include <pthread.h>
#endif
#endif
#include <stdio.h>
#define THREADS 16
@@ -91,16 +89,16 @@ struct sqlca_t *ECPGget_sqlca(void);
#endif
#line 16 "descriptor.pgc"
#line 14 "descriptor.pgc"
/* exec sql whenever sqlerror sqlprint ; */
#line 17 "descriptor.pgc"
#line 15 "descriptor.pgc"
/* exec sql whenever not found sqlprint ; */
#line 18 "descriptor.pgc"
#line 16 "descriptor.pgc"
#if defined(ENABLE_THREAD_SAFETY) && defined(WIN32)
#if defined(WIN32)
static unsigned __stdcall fn(void* arg)
#else
static void* fn(void* arg)
@@ -111,16 +109,16 @@ static void* fn(void* arg)
for (i = 1; i <= REPEATS; ++i)
{
ECPGallocate_desc(__LINE__, "mydesc");
#line 30 "descriptor.pgc"
#line 28 "descriptor.pgc"
if (sqlca.sqlcode < 0) sqlprint();
#line 30 "descriptor.pgc"
#line 28 "descriptor.pgc"
ECPGdeallocate_desc(__LINE__, "mydesc");
#line 31 "descriptor.pgc"
#line 29 "descriptor.pgc"
if (sqlca.sqlcode < 0) sqlprint();
#line 31 "descriptor.pgc"
#line 29 "descriptor.pgc"
}
@@ -129,7 +127,6 @@ if (sqlca.sqlcode < 0) sqlprint();
int main ()
{
#ifdef ENABLE_THREAD_SAFETY
int i;
#ifdef WIN32
HANDLE threads[THREADS];
@@ -153,9 +150,6 @@ int main ()
for (i = 0; i < THREADS; ++i)
pthread_join(threads[i], NULL);
#endif
#else
fn(NULL);
#endif
return 0;
}

View File

@@ -11,14 +11,6 @@
#include <stdlib.h>
#include "ecpg_config.h"
#ifndef ENABLE_THREAD_SAFETY
int
main(void)
{
printf("No threading enabled.\n");
return 0;
}
#else
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
@@ -101,7 +93,7 @@ struct sqlca_t *ECPGget_sqlca(void);
#endif
#line 26 "prep.pgc"
#line 18 "prep.pgc"
#line 1 "regression.h"
@@ -111,14 +103,14 @@ struct sqlca_t *ECPGget_sqlca(void);
#line 27 "prep.pgc"
#line 19 "prep.pgc"
/* exec sql whenever sqlerror sqlprint ; */
#line 29 "prep.pgc"
#line 21 "prep.pgc"
/* exec sql whenever not found sqlprint ; */
#line 30 "prep.pgc"
#line 22 "prep.pgc"
#ifdef WIN32
@@ -134,64 +126,64 @@ static void* fn(void* arg)
#line 41 "prep.pgc"
#line 33 "prep.pgc"
int value ;
#line 42 "prep.pgc"
#line 34 "prep.pgc"
char name [ 100 ] ;
#line 43 "prep.pgc"
#line 35 "prep.pgc"
char query [ 256 ] = "INSERT INTO T VALUES ( ? )" ;
/* exec sql end declare section */
#line 44 "prep.pgc"
#line 36 "prep.pgc"
value = (intptr_t) arg;
sprintf(name, "Connection: %d", value);
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , name, 0);
#line 49 "prep.pgc"
#line 41 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 49 "prep.pgc"
#line 41 "prep.pgc"
{ ECPGsetcommit(__LINE__, "on", NULL);
#line 50 "prep.pgc"
#line 42 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 50 "prep.pgc"
#line 42 "prep.pgc"
for (i = 1; i <= REPEATS; ++i)
{
{ ECPGprepare(__LINE__, NULL, 0, "i", query);
#line 53 "prep.pgc"
#line 45 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 53 "prep.pgc"
#line 45 "prep.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_execute, "i",
ECPGt_int,&(value),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 54 "prep.pgc"
#line 46 "prep.pgc"
if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint();
#line 54 "prep.pgc"
#line 46 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 54 "prep.pgc"
#line 46 "prep.pgc"
}
{ ECPGdeallocate(__LINE__, 0, NULL, "i");
#line 56 "prep.pgc"
#line 48 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 56 "prep.pgc"
#line 48 "prep.pgc"
{ ECPGdisconnect(__LINE__, name);
#line 57 "prep.pgc"
#line 49 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 57 "prep.pgc"
#line 49 "prep.pgc"
return 0;
@@ -207,34 +199,34 @@ int main ()
#endif
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0);
#line 71 "prep.pgc"
#line 63 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 71 "prep.pgc"
#line 63 "prep.pgc"
{ ECPGsetcommit(__LINE__, "on", NULL);
#line 72 "prep.pgc"
#line 64 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 72 "prep.pgc"
#line 64 "prep.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table if exists T", ECPGt_EOIT, ECPGt_EORT);
#line 73 "prep.pgc"
#line 65 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 73 "prep.pgc"
#line 65 "prep.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table T ( i int )", ECPGt_EOIT, ECPGt_EORT);
#line 74 "prep.pgc"
#line 66 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 74 "prep.pgc"
#line 66 "prep.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");
#line 75 "prep.pgc"
#line 67 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 75 "prep.pgc"
#line 67 "prep.pgc"
#ifdef WIN32
@@ -256,4 +248,3 @@ if (sqlca.sqlcode < 0) sqlprint();}
return 0;
}
#endif

View File

@@ -15,14 +15,6 @@
#include <stdlib.h>
#include "ecpg_config.h"
#ifndef ENABLE_THREAD_SAFETY
int
main(void)
{
printf("No threading enabled.\n");
return 0;
}
#else
#ifndef WIN32
#include <pthread.h>
#else
@@ -38,7 +30,7 @@ main(void)
#line 24 "thread.pgc"
#line 16 "thread.pgc"
void *test_thread(void *arg);
@@ -57,10 +49,10 @@ int main()
/* exec sql begin declare section */
#line 40 "thread.pgc"
#line 32 "thread.pgc"
int l_rows ;
/* exec sql end declare section */
#line 41 "thread.pgc"
#line 33 "thread.pgc"
/* Do not switch on debug output for regression tests. The threads get executed in
@@ -69,22 +61,22 @@ int main()
/* setup test_thread table */
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); }
#line 48 "thread.pgc"
#line 40 "thread.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test_thread", ECPGt_EOIT, ECPGt_EORT);}
#line 49 "thread.pgc"
#line 41 "thread.pgc"
/* DROP might fail */
{ ECPGtrans(__LINE__, NULL, "commit");}
#line 50 "thread.pgc"
#line 42 "thread.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test_thread ( tstamp timestamp not null default cast ( timeofday ( ) as timestamp ) , thread text not null , iteration integer not null , primary key ( thread , iteration ) )", ECPGt_EOIT, ECPGt_EORT);}
#line 55 "thread.pgc"
#line 47 "thread.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");}
#line 56 "thread.pgc"
#line 48 "thread.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");}
#line 57 "thread.pgc"
#line 49 "thread.pgc"
/* create, and start, threads */
@@ -116,18 +108,18 @@ int main()
/* and check results */
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); }
#line 87 "thread.pgc"
#line 79 "thread.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select count ( * ) from test_thread", ECPGt_EOIT,
ECPGt_int,&(l_rows),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
#line 88 "thread.pgc"
#line 80 "thread.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");}
#line 89 "thread.pgc"
#line 81 "thread.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");}
#line 90 "thread.pgc"
#line 82 "thread.pgc"
if( l_rows == (nthreads * iterations) )
printf("Success.\n");
@@ -145,13 +137,13 @@ void *test_thread(void *arg)
#line 104 "thread.pgc"
#line 96 "thread.pgc"
int l_i ;
#line 105 "thread.pgc"
#line 97 "thread.pgc"
char l_connection [ 128 ] ;
/* exec sql end declare section */
#line 106 "thread.pgc"
#line 98 "thread.pgc"
/* build up connection name, and connect to database */
@@ -161,13 +153,13 @@ void *test_thread(void *arg)
_snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
#endif
/* exec sql whenever sqlerror sqlprint ; */
#line 114 "thread.pgc"
#line 106 "thread.pgc"
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , l_connection, 0);
#line 115 "thread.pgc"
#line 107 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 115 "thread.pgc"
#line 107 "thread.pgc"
if( sqlca.sqlcode != 0 )
{
@@ -175,10 +167,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
return NULL;
}
{ ECPGtrans(__LINE__, l_connection, "begin");
#line 121 "thread.pgc"
#line 113 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 121 "thread.pgc"
#line 113 "thread.pgc"
/* insert into test_thread table */
@@ -189,10 +181,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 126 "thread.pgc"
#line 118 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 126 "thread.pgc"
#line 118 "thread.pgc"
if( sqlca.sqlcode != 0 )
printf("%s: ERROR: insert failed!\n", l_connection);
@@ -200,17 +192,16 @@ if (sqlca.sqlcode < 0) sqlprint();}
/* all done */
{ ECPGtrans(__LINE__, l_connection, "commit");
#line 132 "thread.pgc"
#line 124 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 132 "thread.pgc"
#line 124 "thread.pgc"
{ ECPGdisconnect(__LINE__, l_connection);
#line 133 "thread.pgc"
#line 125 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 133 "thread.pgc"
#line 125 "thread.pgc"
return NULL;
}
#endif /* ENABLE_THREAD_SAFETY */

View File

@@ -15,14 +15,6 @@
#include <stdlib.h>
#include "ecpg_config.h"
#ifndef ENABLE_THREAD_SAFETY
int
main(void)
{
printf("No threading enabled.\n");
return 0;
}
#else
#ifndef WIN32
#include <pthread.h>
#else
@@ -38,7 +30,7 @@ main(void)
#line 24 "thread_implicit.pgc"
#line 16 "thread_implicit.pgc"
void *test_thread(void *arg);
@@ -57,10 +49,10 @@ int main()
/* exec sql begin declare section */
#line 40 "thread_implicit.pgc"
#line 32 "thread_implicit.pgc"
int l_rows ;
/* exec sql end declare section */
#line 41 "thread_implicit.pgc"
#line 33 "thread_implicit.pgc"
/* Do not switch on debug output for regression tests. The threads get executed in
@@ -69,22 +61,22 @@ int main()
/* setup test_thread table */
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); }
#line 48 "thread_implicit.pgc"
#line 40 "thread_implicit.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test_thread", ECPGt_EOIT, ECPGt_EORT);}
#line 49 "thread_implicit.pgc"
#line 41 "thread_implicit.pgc"
/* DROP might fail */
{ ECPGtrans(__LINE__, NULL, "commit");}
#line 50 "thread_implicit.pgc"
#line 42 "thread_implicit.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test_thread ( tstamp timestamp not null default cast ( timeofday ( ) as timestamp ) , thread text not null , iteration integer not null , primary key ( thread , iteration ) )", ECPGt_EOIT, ECPGt_EORT);}
#line 55 "thread_implicit.pgc"
#line 47 "thread_implicit.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");}
#line 56 "thread_implicit.pgc"
#line 48 "thread_implicit.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");}
#line 57 "thread_implicit.pgc"
#line 49 "thread_implicit.pgc"
/* create, and start, threads */
@@ -116,18 +108,18 @@ int main()
/* and check results */
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); }
#line 87 "thread_implicit.pgc"
#line 79 "thread_implicit.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select count ( * ) from test_thread", ECPGt_EOIT,
ECPGt_int,&(l_rows),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
#line 88 "thread_implicit.pgc"
#line 80 "thread_implicit.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");}
#line 89 "thread_implicit.pgc"
#line 81 "thread_implicit.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");}
#line 90 "thread_implicit.pgc"
#line 82 "thread_implicit.pgc"
if( l_rows == (nthreads * iterations) )
printf("Success.\n");
@@ -145,13 +137,13 @@ void *test_thread(void *arg)
#line 104 "thread_implicit.pgc"
#line 96 "thread_implicit.pgc"
int l_i ;
#line 105 "thread_implicit.pgc"
#line 97 "thread_implicit.pgc"
char l_connection [ 128 ] ;
/* exec sql end declare section */
#line 106 "thread_implicit.pgc"
#line 98 "thread_implicit.pgc"
/* build up connection name, and connect to database */
@@ -161,13 +153,13 @@ void *test_thread(void *arg)
_snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
#endif
/* exec sql whenever sqlerror sqlprint ; */
#line 114 "thread_implicit.pgc"
#line 106 "thread_implicit.pgc"
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , l_connection, 0);
#line 115 "thread_implicit.pgc"
#line 107 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 115 "thread_implicit.pgc"
#line 107 "thread_implicit.pgc"
if( sqlca.sqlcode != 0 )
{
@@ -175,10 +167,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
return NULL;
}
{ ECPGtrans(__LINE__, NULL, "begin");
#line 121 "thread_implicit.pgc"
#line 113 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 121 "thread_implicit.pgc"
#line 113 "thread_implicit.pgc"
/* insert into test_thread table */
@@ -189,10 +181,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 126 "thread_implicit.pgc"
#line 118 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 126 "thread_implicit.pgc"
#line 118 "thread_implicit.pgc"
if( sqlca.sqlcode != 0 )
printf("%s: ERROR: insert failed!\n", l_connection);
@@ -200,17 +192,16 @@ if (sqlca.sqlcode < 0) sqlprint();}
/* all done */
{ ECPGtrans(__LINE__, NULL, "commit");
#line 132 "thread_implicit.pgc"
#line 124 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 132 "thread_implicit.pgc"
#line 124 "thread_implicit.pgc"
{ ECPGdisconnect(__LINE__, l_connection);
#line 133 "thread_implicit.pgc"
#line 125 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();}
#line 133 "thread_implicit.pgc"
#line 125 "thread_implicit.pgc"
return NULL;
}
#endif /* ENABLE_THREAD_SAFETY */

View File

@@ -2,14 +2,6 @@
#include <stdlib.h>
#include "ecpg_config.h"
#ifndef ENABLE_THREAD_SAFETY
int
main(void)
{
printf("No threading enabled.\n");
return 0;
}
#else
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
@@ -87,4 +79,3 @@ int main ()
return 0;
}
#endif

View File

@@ -1,4 +1,3 @@
#ifdef ENABLE_THREAD_SAFETY
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
@@ -7,7 +6,6 @@
#else
#include <pthread.h>
#endif
#endif
#include <stdio.h>
#define THREADS 16
@@ -17,7 +15,7 @@ EXEC SQL include sqlca;
EXEC SQL whenever sqlerror sqlprint;
EXEC SQL whenever not found sqlprint;
#if defined(ENABLE_THREAD_SAFETY) && defined(WIN32)
#if defined(WIN32)
static unsigned __stdcall fn(void* arg)
#else
static void* fn(void* arg)
@@ -36,7 +34,6 @@ static void* fn(void* arg)
int main ()
{
#ifdef ENABLE_THREAD_SAFETY
int i;
#ifdef WIN32
HANDLE threads[THREADS];
@@ -60,9 +57,6 @@ int main ()
for (i = 0; i < THREADS; ++i)
pthread_join(threads[i], NULL);
#endif
#else
fn(NULL);
#endif
return 0;
}

View File

@@ -2,14 +2,6 @@
#include <stdlib.h>
#include "ecpg_config.h"
#ifndef ENABLE_THREAD_SAFETY
int
main(void)
{
printf("No threading enabled.\n");
return 0;
}
#else
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
@@ -93,4 +85,3 @@ int main ()
return 0;
}
#endif

View File

@@ -6,14 +6,6 @@
#include <stdlib.h>
#include "ecpg_config.h"
#ifndef ENABLE_THREAD_SAFETY
int
main(void)
{
printf("No threading enabled.\n");
return 0;
}
#else
#ifndef WIN32
#include <pthread.h>
#else
@@ -133,4 +125,3 @@ void *test_thread(void *arg)
EXEC SQL DISCONNECT :l_connection;
return NULL;
}
#endif /* ENABLE_THREAD_SAFETY */

View File

@@ -6,14 +6,6 @@
#include <stdlib.h>
#include "ecpg_config.h"
#ifndef ENABLE_THREAD_SAFETY
int
main(void)
{
printf("No threading enabled.\n");
return 0;
}
#else
#ifndef WIN32
#include <pthread.h>
#else
@@ -133,4 +125,3 @@ void *test_thread(void *arg)
EXEC SQL DISCONNECT :l_connection;
return NULL;
}
#endif /* ENABLE_THREAD_SAFETY */

View File

@@ -69,11 +69,8 @@ endif
ifeq ($(PORTNAME), win32)
OBJS += \
pthread-win32.o \
win32.o
ifeq ($(enable_thread_safety), yes)
OBJS += pthread-win32.o
endif
endif

View File

@@ -52,13 +52,11 @@
#include <netinet/tcp.h>
#endif
#ifdef ENABLE_THREAD_SAFETY
#ifdef WIN32
#include "pthread-win32.h"
#else
#include <pthread.h>
#endif
#endif
#ifdef USE_LDAP
#ifdef WIN32
@@ -7784,7 +7782,6 @@ pqGetHomeDirectory(char *buf, int bufsize)
static void
default_threadlock(int acquire)
{
#ifdef ENABLE_THREAD_SAFETY
#ifndef WIN32
static pthread_mutex_t singlethread_lock = PTHREAD_MUTEX_INITIALIZER;
#else
@@ -7813,7 +7810,6 @@ default_threadlock(int acquire)
if (pthread_mutex_unlock(&singlethread_lock))
Assert(false);
}
#endif
}
pgthreadlock_t

View File

@@ -3906,11 +3906,7 @@ PQisnonblocking(const PGconn *conn)
int
PQisthreadsafe(void)
{
#ifdef ENABLE_THREAD_SAFETY
return true;
#else
return false;
#endif
}

View File

@@ -88,14 +88,11 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po)
bool usePipe = false;
char *pagerenv;
#if defined(ENABLE_THREAD_SAFETY) && !defined(WIN32)
#if !defined(WIN32)
sigset_t osigset;
bool sigpipe_masked = false;
bool sigpipe_pending;
#endif
#if !defined(ENABLE_THREAD_SAFETY) && !defined(WIN32)
pqsigfunc oldsigpipehandler = NULL;
#endif
#ifdef TIOCGWINSZ
struct winsize screen_size;
@@ -186,12 +183,8 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po)
{
usePipe = true;
#ifndef WIN32
#ifdef ENABLE_THREAD_SAFETY
if (pq_block_sigpipe(&osigset, &sigpipe_pending) == 0)
sigpipe_masked = true;
#else
oldsigpipehandler = pqsignal(SIGPIPE, SIG_IGN);
#endif /* ENABLE_THREAD_SAFETY */
#endif /* WIN32 */
}
else
@@ -324,13 +317,9 @@ exit:
#else
pclose(fout);
#ifdef ENABLE_THREAD_SAFETY
/* we can't easily verify if EPIPE occurred, so say it did */
if (sigpipe_masked)
pq_reset_sigpipe(&osigset, sigpipe_pending, true);
#else
pqsignal(SIGPIPE, oldsigpipehandler);
#endif /* ENABLE_THREAD_SAFETY */
#endif /* WIN32 */
}
}

View File

@@ -44,13 +44,11 @@
#include <sys/stat.h>
#ifdef ENABLE_THREAD_SAFETY
#ifdef WIN32
#include "pthread-win32.h"
#else
#include <pthread.h>
#endif
#endif
/*
* These SSL-related #includes must come after all system-provided headers.
@@ -91,7 +89,6 @@ static bool pq_init_crypto_lib = true;
static bool ssl_lib_initialized = false;
#ifdef ENABLE_THREAD_SAFETY
static long crypto_open_connections = 0;
#ifndef WIN32
@@ -100,7 +97,6 @@ static pthread_mutex_t ssl_config_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t ssl_config_mutex = NULL;
static long win32_ssl_create_mutex = 0;
#endif
#endif /* ENABLE_THREAD_SAFETY */
static PQsslKeyPassHook_OpenSSL_type PQsslKeyPassHook = NULL;
static int ssl_protocol_version_to_openssl(const char *protocol);
@@ -112,15 +108,12 @@ static int ssl_protocol_version_to_openssl(const char *protocol);
void
pgtls_init_library(bool do_ssl, int do_crypto)
{
#ifdef ENABLE_THREAD_SAFETY
/*
* Disallow changing the flags while we have open connections, else we'd
* get completely confused.
*/
if (crypto_open_connections != 0)
return;
#endif
pq_init_ssl_lib = do_ssl;
pq_init_crypto_lib = do_crypto;
@@ -718,7 +711,7 @@ pgtls_verify_peer_name_matches_certificate_guts(PGconn *conn,
return rc;
}
#if defined(ENABLE_THREAD_SAFETY) && defined(HAVE_CRYPTO_LOCK)
#if defined(HAVE_CRYPTO_LOCK)
/*
* Callback functions for OpenSSL internal locking. (OpenSSL 1.1.0
* does its own locking, and doesn't need these anymore. The
@@ -759,7 +752,7 @@ pq_lockingcallback(int mode, int n, const char *file, int line)
Assert(false);
}
}
#endif /* ENABLE_THREAD_SAFETY && HAVE_CRYPTO_LOCK */
#endif /* HAVE_CRYPTO_LOCK */
/*
* Initialize SSL library.
@@ -774,7 +767,6 @@ pq_lockingcallback(int mode, int n, const char *file, int line)
int
pgtls_init(PGconn *conn, bool do_ssl, bool do_crypto)
{
#ifdef ENABLE_THREAD_SAFETY
#ifdef WIN32
/* Also see similar code in fe-connect.c, default_threadlock() */
if (ssl_config_mutex == NULL)
@@ -840,7 +832,6 @@ pgtls_init(PGconn *conn, bool do_ssl, bool do_crypto)
}
}
#endif /* HAVE_CRYPTO_LOCK */
#endif /* ENABLE_THREAD_SAFETY */
if (!ssl_lib_initialized && do_ssl)
{
@@ -857,9 +848,7 @@ pgtls_init(PGconn *conn, bool do_ssl, bool do_crypto)
ssl_lib_initialized = true;
}
#ifdef ENABLE_THREAD_SAFETY
pthread_mutex_unlock(&ssl_config_mutex);
#endif
return 0;
}
@@ -878,7 +867,7 @@ pgtls_init(PGconn *conn, bool do_ssl, bool do_crypto)
static void
destroy_ssl_system(void)
{
#if defined(ENABLE_THREAD_SAFETY) && defined(HAVE_CRYPTO_LOCK)
#if defined(HAVE_CRYPTO_LOCK)
/* Mutex is created in pgtls_init() */
if (pthread_mutex_lock(&ssl_config_mutex))
return;

View File

@@ -35,13 +35,11 @@
#include <sys/stat.h>
#ifdef ENABLE_THREAD_SAFETY
#ifdef WIN32
#include "pthread-win32.h"
#else
#include <pthread.h>
#endif
#endif
#include "fe-auth.h"
#include "libpq-fe.h"
@@ -56,8 +54,6 @@
#define SIGPIPE_MASKED(conn) ((conn)->sigpipe_so || (conn)->sigpipe_flag)
#ifdef ENABLE_THREAD_SAFETY
struct sigpipe_info
{
sigset_t oldsigmask;
@@ -90,24 +86,6 @@ struct sigpipe_info
pq_reset_sigpipe(&(spinfo).oldsigmask, (spinfo).sigpipe_pending, \
(spinfo).got_epipe); \
} while (0)
#else /* !ENABLE_THREAD_SAFETY */
#define DECLARE_SIGPIPE_INFO(spinfo) pqsigfunc spinfo = NULL
#define DISABLE_SIGPIPE(conn, spinfo, failaction) \
do { \
if (!SIGPIPE_MASKED(conn)) \
spinfo = pqsignal(SIGPIPE, SIG_IGN); \
} while (0)
#define REMEMBER_EPIPE(spinfo, cond)
#define RESTORE_SIGPIPE(conn, spinfo) \
do { \
if (!SIGPIPE_MASKED(conn)) \
pqsignal(SIGPIPE, spinfo); \
} while (0)
#endif /* ENABLE_THREAD_SAFETY */
#else /* WIN32 */
#define DECLARE_SIGPIPE_INFO(spinfo)
@@ -524,7 +502,7 @@ PQgssEncInUse(PGconn *conn)
#endif /* ENABLE_GSS */
#if defined(ENABLE_THREAD_SAFETY) && !defined(WIN32)
#if !defined(WIN32)
/*
* Block SIGPIPE for this thread. This prevents send()/write() from exiting
@@ -608,4 +586,4 @@ pq_reset_sigpipe(sigset_t *osigset, bool sigpipe_pending, bool got_epipe)
SOCK_ERRNO_SET(save_errno);
}
#endif /* ENABLE_THREAD_SAFETY && !WIN32 */
#endif /* !WIN32 */

View File

@@ -28,9 +28,7 @@
* with the semantics it had in 9.2; in particular, this has different
* behavior for SIGALRM than the version in src/port/pqsignal.c.
*
* libpq itself uses this only for SIGPIPE (and even then, only in
* non-ENABLE_THREAD_SAFETY builds), so the incompatibility isn't
* troublesome for internal references.
* libpq itself does not use this.
*/
pqsigfunc
pqsignal(int signo, pqsigfunc func)

View File

@@ -31,14 +31,12 @@
#include <sys/time.h>
#endif
#ifdef ENABLE_THREAD_SAFETY
#ifdef WIN32
#include "pthread-win32.h"
#else
#include <pthread.h>
#endif
#include <signal.h>
#endif
/* include stuff common to fe and be */
#include "libpq/pqcomm.h"
@@ -681,15 +679,10 @@ extern int pqPacketSend(PGconn *conn, char pack_type,
const void *buf, size_t buf_len);
extern bool pqGetHomeDirectory(char *buf, int bufsize);
#ifdef ENABLE_THREAD_SAFETY
extern pgthreadlock_t pg_g_threadlock;
#define pglock_thread() pg_g_threadlock(true)
#define pgunlock_thread() pg_g_threadlock(false)
#else
#define pglock_thread() ((void) 0)
#define pgunlock_thread() ((void) 0)
#endif
/* === in fe-exec.c === */
@@ -765,7 +758,7 @@ extern ssize_t pqsecure_write(PGconn *, const void *ptr, size_t len);
extern ssize_t pqsecure_raw_read(PGconn *, void *ptr, size_t len);
extern ssize_t pqsecure_raw_write(PGconn *, const void *ptr, size_t len);
#if defined(ENABLE_THREAD_SAFETY) && !defined(WIN32)
#if !defined(WIN32)
extern int pq_block_sigpipe(sigset_t *osigset, bool *sigpipe_pending);
extern void pq_reset_sigpipe(sigset_t *osigset, bool sigpipe_pending,
bool got_epipe);