Postmaster sets max_safe_fds by testing how many open file descriptors it
can open, and that is normally inherited by all child processes at fork().
Not so on EXEC_BACKEND, ie. Windows, however. Because of that, we
effectively ignored max_files_per_process on Windows, and always assumed
a conservative default of 32 simultaneous open files. That could have an
impact on performance, if you need to access a lot of different files
in a query. After this patch, the value is passed to child processes by
save/restore_backend_variables() among many other global variables.
It has been like this forever, but given the lack of complaints about it,
I'm not backpatching this.
TimestampTz PgReloadTime;
bool redirection_done;
bool IsBinaryUpgrade;
+ int max_safe_fds;
#ifdef WIN32
HANDLE PostmasterHandle;
HANDLE initial_signal_pipe;
param->redirection_done = redirection_done;
param->IsBinaryUpgrade = IsBinaryUpgrade;
+ param->max_safe_fds = max_safe_fds;
#ifdef WIN32
param->PostmasterHandle = PostmasterHandle;
redirection_done = param->redirection_done;
IsBinaryUpgrade = param->IsBinaryUpgrade;
+ max_safe_fds = param->max_safe_fds;
#ifdef WIN32
PostmasterHandle = param->PostmasterHandle;
* Note: the value of max_files_per_process is taken into account while
* setting this variable, and so need not be tested separately.
*/
-static int max_safe_fds = 32; /* default if not changed */
+int max_safe_fds = 32; /* default if not changed */
/* Debugging.... */
/* GUC parameter */
extern int max_files_per_process;
+/*
+ * This is private to fd.c, but exported for save/restore_backend_variables()
+ */
+extern int max_safe_fds;
+
/*
* prototypes for functions in fd.c