postgres.git / summary / log / commit / refs

commit    a01e479e84837cfdfae4a9b062b97ce1a261a96c
Author:   Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date:     Tue Aug 29 06:09:40 2023 +0000
First released in: 17.0, 13.13, 14.10, 15.5, 16.0

    Initialize ListenSocket array earlier.
    
    After commit b0bea38705, syslogger prints 63 warnings about failing to
    close a listen socket at postmaster startup. That's because the
    syslogger process forks before the ListenSockets array is initialized,
    so ClosePostmasterPorts() calls "close(0)" 64 times. The first call
    succeeds, because fd 0 is stdin.
    
    This has been like this since commit 9a86f03b4e in version 13, which
    moved the SysLogger_Start() call to before initializing ListenSockets.
    We just didn't notice until commit b0bea38705 added the LOG message.
    
    Reported by Michael Paquier and Jeff Janes.
    
    Author: Michael Paquier
    Discussion: https://www.postgresql.org/message-id/ZOvvuQe0rdj2slA9%40paquier.xyz
    Discussion: https://www.postgresql.org/message-id/ZO0fgDwVw2SUJiZx@paquier.xyz#482670177eb4eaf4c9f03c1eed963e5f
    Backpatch-through: 13


src/backend/postmaster/postmaster.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 6f51fe69350..9c57f4aae32 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -1092,6 +1092,17 @@ PostmasterMain(int argc, char *argv[]) errmsg("could not remove file \"%s\": %m", LOG_METAINFO_DATAFILE))); + /* + * Initialize input sockets. + * + * Mark them all closed, and set up an on_proc_exit function that's + * charged with closing the sockets again at postmaster shutdown. + */ + for (i = 0; i < MAXLISTEN; i++) + ListenSocket[i] = PGINVALID_SOCKET; + + on_proc_exit(CloseServerPorts, 0); + /* * If enabled, start up syslogger collection subprocess */ @@ -1126,15 +1137,7 @@ PostmasterMain(int argc, char *argv[]) /* * Establish input sockets. - * - * First, mark them all closed, and set up an on_proc_exit function that's - * charged with closing the sockets again at postmaster shutdown. */ - for (i = 0; i < MAXLISTEN; i++) - ListenSocket[i] = PGINVALID_SOCKET; - - on_proc_exit(CloseServerPorts, 0); - if (ListenAddresses) { char *rawstring; [parent: 27566bcf3c87]