1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-15 19:21:59 +03: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:
Andres Freund
2022-10-06 13:03:31 -07:00
parent 0fa41648d7
commit 4289263cf2
7 changed files with 31 additions and 12 deletions

View File

@ -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)

View File

@ -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

View File

@ -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"

View File

@ -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)

View File

@ -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,
) )

View File

@ -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"

View File

@ -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');