diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2024-12-17 12:23:26 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2024-12-17 12:23:26 -0500 |
commit | 21fb39cb07938d29f2c7cfcf627d1b3d6b48e61c (patch) | |
tree | 17de3a2f8ae0d9f20e4a2977ad720ab5fcf1df15 /src/backend/tcop/postgres.c | |
parent | c91963da1302e8dd490bde115f3956f7d2f1258d (diff) | |
download | postgresql-21fb39cb07938d29f2c7cfcf627d1b3d6b48e61c.tar.gz postgresql-21fb39cb07938d29f2c7cfcf627d1b3d6b48e61c.zip |
Set max_safe_fds whenever we create shared memory and semaphores.
Formerly we skipped this in bootstrap/check mode and in single-user
mode. That's bad in check mode because it may allow accepting a
value of max_connections that doesn't actually work: on platforms
where semaphores consume file descriptors, there may not be enough
free FDs left over to satisfy fd.c, causing postmaster start to
fail. It's also not great in single-user mode, because fd.c will
operate with just the minimum allowable value of max_safe_fds,
resulting in excess file open/close overhead if anything moderately
complicated is done in single-user mode. (There may be some penalty
for bootstrap mode too, though probably not much.)
Discussion: https://postgr.es/m/2081982.1734393311@sss.pgh.pa.us
Diffstat (limited to 'src/backend/tcop/postgres.c')
-rw-r--r-- | src/backend/tcop/postgres.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 3ce088f0bad..85902788181 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -4099,9 +4099,19 @@ PostgresSingleUserMain(int argc, char *argv[], */ InitializeWalConsistencyChecking(); + /* + * Create shared memory etc. (Nothing's really "shared" in single-user + * mode, but we must have these data structures anyway.) + */ CreateSharedMemoryAndSemaphores(); /* + * Estimate number of openable files. This must happen after setting up + * semaphores, because on some platforms semaphores count as open files. + */ + set_max_safe_fds(); + + /* * Remember stand-alone backend startup time,roughly at the same point * during startup that postmaster does so. */ |