mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	windows: Adjust FD_SETSIZE via commandline define
When using precompiled headers, we cannot pre-define macros for the system headers from within .c files, as headers are already processed before the #define in the C file is reached. But we can pre-define using -DFD_SETSIZE, as long as that's also used when building the precompiled header. A few files #define FD_SETSIZE 1024 on windows, as the default is only 64. I am hesitant to change FD_SETSIZE globally on windows, due to src/backend/port/win32/socket.c using it to size on-stack arrays. Instead add -DFD_SETSIZE=1024 when building the specific targets needing it. We likely should move away from using select() in those places, but that's a larger change. Reviewed-by: Thomas Munro <thomas.munro@gmail.com> Reviewed-by: Peter Eisentraut <peter.eisentraut@enterprisedb.com> Reviewed-by: Justin Pryzby <pryzby@telsasoft.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/20221005190829.lda7ttalh4mzrvf4@awork3.anarazel.de Discussion: https://postgr.es/m/CA+hUKG+50eOUbN++ocDc0Qnp9Pvmou23DSXu=ZA6fepOcftKqA@mail.gmail.com Discussion: https://postgr.es/m/20190826054000.GE7005%40paquier.xyz
This commit is contained in:
		
							parent
							
								
									0fa41648d7
								
							
						
					
					
						commit
						4289263cf2
					
				| @ -18,6 +18,8 @@ LDFLAGS_INTERNAL += -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport) | |||||||
| 
 | 
 | ||||||
| ifneq ($(PORTNAME), win32) | ifneq ($(PORTNAME), win32) | ||||||
| override CFLAGS += $(PTHREAD_CFLAGS) | override CFLAGS += $(PTHREAD_CFLAGS) | ||||||
|  | else | ||||||
|  | override CPPFLAGS += -DFD_SETSIZE=1024 | ||||||
| endif | endif | ||||||
| LIBS += $(PTHREAD_LIBS) | LIBS += $(PTHREAD_LIBS) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -27,6 +27,7 @@ pgbench = executable('pgbench', | |||||||
|   pgbench_sources, |   pgbench_sources, | ||||||
|   dependencies: [frontend_code, libpq, thread_dep], |   dependencies: [frontend_code, libpq, thread_dep], | ||||||
|   include_directories: include_directories('.'), |   include_directories: include_directories('.'), | ||||||
|  |   c_args: host_system == 'windows' ? ['-DFD_SETSIZE=1024'] : [], | ||||||
|   kwargs: default_bin_args, |   kwargs: default_bin_args, | ||||||
| ) | ) | ||||||
| bin_targets += pgbench | bin_targets += pgbench | ||||||
|  | |||||||
| @ -27,8 +27,8 @@ | |||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #ifdef WIN32 | #if defined(WIN32) && FD_SETSIZE < 1024 | ||||||
| #define FD_SETSIZE 1024			/* must set before winsock2.h is included */ | #error FD_SETSIZE needs to have been increased | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #include "postgres_fe.h" | #include "postgres_fe.h" | ||||||
|  | |||||||
| @ -34,6 +34,10 @@ OBJS = \ | |||||||
| 	simple_list.o \
 | 	simple_list.o \
 | ||||||
| 	string_utils.o | 	string_utils.o | ||||||
| 
 | 
 | ||||||
|  | ifeq ($(PORTNAME), win32) | ||||||
|  | override CPPFLAGS += -DFD_SETSIZE=1024 | ||||||
|  | endif | ||||||
|  | 
 | ||||||
| all: libpgfeutils.a | all: libpgfeutils.a | ||||||
| 
 | 
 | ||||||
| libpgfeutils.a: $(OBJS) | libpgfeutils.a: $(OBJS) | ||||||
|  | |||||||
| @ -24,6 +24,7 @@ fe_utils_sources += psqlscan | |||||||
| fe_utils = static_library('libpgfeutils', | fe_utils = static_library('libpgfeutils', | ||||||
|   fe_utils_sources + generated_headers, |   fe_utils_sources + generated_headers, | ||||||
|   include_directories: [postgres_inc, libpq_inc], |   include_directories: [postgres_inc, libpq_inc], | ||||||
|  |   c_args: host_system == 'windows' ? ['-DFD_SETSIZE=1024'] : [], | ||||||
|   dependencies: frontend_common_code, |   dependencies: frontend_common_code, | ||||||
|   kwargs: default_lib_args, |   kwargs: default_lib_args, | ||||||
| ) | ) | ||||||
|  | |||||||
| @ -12,8 +12,8 @@ | |||||||
|  *------------------------------------------------------------------------- |  *------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #ifdef WIN32 | #if defined(WIN32) && FD_SETSIZE < 1024 | ||||||
| #define FD_SETSIZE 1024			/* must set before winsock2.h is included */ | #error FD_SETSIZE needs to have been increased | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #include "postgres_fe.h" | #include "postgres_fe.h" | ||||||
|  | |||||||
| @ -35,6 +35,7 @@ my $libpq; | |||||||
| my @unlink_on_exit; | my @unlink_on_exit; | ||||||
| 
 | 
 | ||||||
| # Set of variables for modules in contrib/ and src/test/modules/ | # Set of variables for modules in contrib/ and src/test/modules/ | ||||||
|  | my $contrib_defines        = {}; | ||||||
| my @contrib_uselibpq       = (); | my @contrib_uselibpq       = (); | ||||||
| my @contrib_uselibpgport   = (); | my @contrib_uselibpgport   = (); | ||||||
| my @contrib_uselibpgcommon = (); | my @contrib_uselibpgcommon = (); | ||||||
| @ -52,6 +53,7 @@ my @contrib_excludes       = ( | |||||||
| 	'unsafe_tests'); | 	'unsafe_tests'); | ||||||
| 
 | 
 | ||||||
| # Set of variables for frontend modules | # Set of variables for frontend modules | ||||||
|  | my $frontend_defines = { 'pgbench' => 'FD_SETSIZE=1024' }; | ||||||
| my @frontend_uselibpq = | my @frontend_uselibpq = | ||||||
|   ('pg_amcheck', 'pg_ctl', 'pg_upgrade', 'pgbench', 'psql', 'initdb'); |   ('pg_amcheck', 'pg_ctl', 'pg_upgrade', 'pgbench', 'psql', 'initdb'); | ||||||
| my @frontend_uselibpgport = ( | my @frontend_uselibpgport = ( | ||||||
| @ -175,6 +177,7 @@ sub mkvcbuild | |||||||
| 
 | 
 | ||||||
| 	$libpgfeutils = $solution->AddProject('libpgfeutils', 'lib', 'misc'); | 	$libpgfeutils = $solution->AddProject('libpgfeutils', 'lib', 'misc'); | ||||||
| 	$libpgfeutils->AddDefine('FRONTEND'); | 	$libpgfeutils->AddDefine('FRONTEND'); | ||||||
|  | 	$libpgfeutils->AddDefine('FD_SETSIZE=1024'); | ||||||
| 	$libpgfeutils->AddIncludeDir('src/interfaces/libpq'); | 	$libpgfeutils->AddIncludeDir('src/interfaces/libpq'); | ||||||
| 	$libpgfeutils->AddFiles('src/fe_utils', @pgfeutilsfiles); | 	$libpgfeutils->AddFiles('src/fe_utils', @pgfeutilsfiles); | ||||||
| 
 | 
 | ||||||
| @ -1120,10 +1123,10 @@ sub AdjustContribProj | |||||||
| { | { | ||||||
| 	my $proj = shift; | 	my $proj = shift; | ||||||
| 	AdjustModule( | 	AdjustModule( | ||||||
| 		$proj,                  \@contrib_uselibpq, | 		$proj,                    $contrib_defines, | ||||||
| 		\@contrib_uselibpgport, \@contrib_uselibpgcommon, | 		\@contrib_uselibpq,       \@contrib_uselibpgport, | ||||||
| 		$contrib_extralibs,     $contrib_extrasource, | 		\@contrib_uselibpgcommon, $contrib_extralibs, | ||||||
| 		$contrib_extraincludes); | 		$contrib_extrasource,     $contrib_extraincludes); | ||||||
| 	return; | 	return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1131,16 +1134,17 @@ sub AdjustFrontendProj | |||||||
| { | { | ||||||
| 	my $proj = shift; | 	my $proj = shift; | ||||||
| 	AdjustModule( | 	AdjustModule( | ||||||
| 		$proj,                   \@frontend_uselibpq, | 		$proj,                     $frontend_defines, | ||||||
| 		\@frontend_uselibpgport, \@frontend_uselibpgcommon, | 		\@frontend_uselibpq,       \@frontend_uselibpgport, | ||||||
| 		$frontend_extralibs,     $frontend_extrasource, | 		\@frontend_uselibpgcommon, $frontend_extralibs, | ||||||
| 		$frontend_extraincludes); | 		$frontend_extrasource,     $frontend_extraincludes); | ||||||
| 	return; | 	return; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| sub AdjustModule | sub AdjustModule | ||||||
| { | { | ||||||
| 	my $proj                  = shift; | 	my $proj                  = shift; | ||||||
|  | 	my $module_defines        = shift; | ||||||
| 	my $module_uselibpq       = shift; | 	my $module_uselibpq       = shift; | ||||||
| 	my $module_uselibpgport   = shift; | 	my $module_uselibpgport   = shift; | ||||||
| 	my $module_uselibpgcommon = shift; | 	my $module_uselibpgcommon = shift; | ||||||
| @ -1149,6 +1153,13 @@ sub AdjustModule | |||||||
| 	my $module_extraincludes  = shift; | 	my $module_extraincludes  = shift; | ||||||
| 	my $n                     = $proj->{name}; | 	my $n                     = $proj->{name}; | ||||||
| 
 | 
 | ||||||
|  | 	if ($module_defines->{$n}) | ||||||
|  | 	{ | ||||||
|  | 		foreach my $d ($module_defines->{$n}) | ||||||
|  | 		{ | ||||||
|  | 			$proj->AddDefine($d); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 	if (grep { /^$n$/ } @{$module_uselibpq}) | 	if (grep { /^$n$/ } @{$module_uselibpq}) | ||||||
| 	{ | 	{ | ||||||
| 		$proj->AddIncludeDir('src\interfaces\libpq'); | 		$proj->AddIncludeDir('src\interfaces\libpq'); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user