From 109d7aff73bb94570b36e6d4d9e4e3119b92d970 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 17 Aug 2004 04:24:23 +0000 Subject: [PATCH] Fix linking problem when enabling thread safety on Darwin: uninitialized global variables are problematic on this platform. Simplest solution seems to be to initialize pthread key variable to 0. Also, rename this variable and check_sigpipe_handler to something involving "pq" to avoid gratuitous pollution of application namespace. --- src/interfaces/libpq/fe-connect.c | 4 ++-- src/interfaces/libpq/fe-print.c | 6 +++--- src/interfaces/libpq/fe-secure.c | 16 ++++++++-------- src/interfaces/libpq/libpq-int.h | 6 +++--- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index e4744854c5..b560f358a6 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.279 2004/08/11 18:06:01 tgl Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.280 2004/08/17 04:24:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -886,7 +886,7 @@ connectDBStart(PGconn *conn) static pthread_once_t check_sigpipe_once = PTHREAD_ONCE_INIT; /* Check only on first connection request */ - pthread_once(&check_sigpipe_once, check_sigpipe_handler); + pthread_once(&check_sigpipe_once, pq_check_sigpipe_handler); #endif #endif diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c index 64b53fda3a..af883e10ae 100644 --- a/src/interfaces/libpq/fe-print.c +++ b/src/interfaces/libpq/fe-print.c @@ -10,7 +10,7 @@ * didn't really belong there. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/libpq/fe-print.c,v 1.51 2004/04/19 17:42:59 momjian Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/fe-print.c,v 1.52 2004/08/17 04:24:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -188,7 +188,7 @@ PQprint(FILE *fout, { usePipe = 1; #ifdef ENABLE_THREAD_SAFETY - pthread_setspecific(thread_in_send, "t"); + pthread_setspecific(pq_thread_in_send, "t"); #else #ifndef WIN32 oldsigpipehandler = pqsignal(SIGPIPE, SIG_IGN); @@ -310,7 +310,7 @@ PQprint(FILE *fout, pclose(fout); #endif #ifdef ENABLE_THREAD_SAFETY - pthread_setspecific(thread_in_send, "f"); + pthread_setspecific(pq_thread_in_send, "f"); #else #ifndef WIN32 pqsignal(SIGPIPE, oldsigpipehandler); diff --git a/src/interfaces/libpq/fe-secure.c b/src/interfaces/libpq/fe-secure.c index 6e76e9674c..dac639c8e4 100644 --- a/src/interfaces/libpq/fe-secure.c +++ b/src/interfaces/libpq/fe-secure.c @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/libpq/fe-secure.c,v 1.45 2004/07/12 14:23:28 momjian Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/fe-secure.c,v 1.46 2004/08/17 04:24:23 tgl Exp $ * * NOTES * The client *requires* a valid server certificate. Since @@ -152,7 +152,7 @@ static SSL_CTX *SSL_context = NULL; #ifdef ENABLE_THREAD_SAFETY static void sigpipe_handler_ignore_send(int signo); -pthread_key_t thread_in_send; +pthread_key_t pq_thread_in_send = 0; #endif /* ------------------------------------------------------------ */ @@ -367,7 +367,7 @@ pqsecure_write(PGconn *conn, const void *ptr, size_t len) ssize_t n; #ifdef ENABLE_THREAD_SAFETY - pthread_setspecific(thread_in_send, "t"); + pthread_setspecific(pq_thread_in_send, "t"); #else #ifndef WIN32 pqsigfunc oldsighandler = pqsignal(SIGPIPE, SIG_IGN); @@ -435,7 +435,7 @@ pqsecure_write(PGconn *conn, const void *ptr, size_t len) n = send(conn->sock, ptr, len, 0); #ifdef ENABLE_THREAD_SAFETY - pthread_setspecific(thread_in_send, "f"); + pthread_setspecific(pq_thread_in_send, "f"); #else #ifndef WIN32 pqsignal(SIGPIPE, oldsighandler); @@ -1188,7 +1188,7 @@ PQgetssl(PGconn *conn) * Check SIGPIPE handler and perhaps install our own. */ void -check_sigpipe_handler(void) +pq_check_sigpipe_handler(void) { pqsigfunc pipehandler; @@ -1204,7 +1204,7 @@ check_sigpipe_handler(void) * Create key first because the signal handler might be called * right after being installed. */ - pthread_key_create(&thread_in_send, NULL); + pthread_key_create(&pq_thread_in_send, NULL); pqsignal(SIGPIPE, sigpipe_handler_ignore_send); } } @@ -1236,8 +1236,8 @@ pqbool PQinSend(void) { #ifdef ENABLE_THREAD_SAFETY - return (pthread_getspecific(thread_in_send) /* has it been set? */ && - *(char *)pthread_getspecific(thread_in_send) == 't') ? true : false; + return (pthread_getspecific(pq_thread_in_send) /* has it been set? */ && + *(char *)pthread_getspecific(pq_thread_in_send) == 't') ? true : false; #else /* * No threading: our code ignores SIGPIPE around send(). diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index e74dbe7b77..ac48a9908c 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -12,7 +12,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.88 2004/05/31 18:42:40 tgl Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.89 2004/08/17 04:24:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -456,8 +456,8 @@ extern void pqsecure_close(PGconn *); extern ssize_t pqsecure_read(PGconn *, void *ptr, size_t len); extern ssize_t pqsecure_write(PGconn *, const void *ptr, size_t len); #ifdef ENABLE_THREAD_SAFETY -extern void check_sigpipe_handler(void); -extern pthread_key_t thread_in_send; +extern void pq_check_sigpipe_handler(void); +extern pthread_key_t pq_thread_in_send; #endif #ifdef USE_SSL