Set max_safe_fds whenever we create shared memory and semaphores.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 17 Dec 2024 17:23:26 +0000 (12:23 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 17 Dec 2024 17:23:26 +0000 (12:23 -0500)
commit21fb39cb07938d29f2c7cfcf627d1b3d6b48e61c
tree17de3a2f8ae0d9f20e4a2977ad720ab5fcf1df15
parentc91963da1302e8dd490bde115f3956f7d2f1258d
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
src/backend/bootstrap/bootstrap.c
src/backend/tcop/postgres.c