mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-30 00:04:49 -04:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									8b82a705c8
								
							
						
					
					
						commit
						109d7aff73
					
				| @ -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 | ||||
| 
 | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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(). | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user