aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2023-08-29 09:09:40 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2023-08-29 09:12:35 +0300
commit0c10240600ad3d7a139737467184777ea822f593 (patch)
tree4bbd0d58db37fd9314155b34d8a34caa6aff5e20 /src
parent8700851352a89e9e78da9df31fd6d3a75df98470 (diff)
downloadpostgresql-0c10240600ad3d7a139737467184777ea822f593.tar.gz
postgresql-0c10240600ad3d7a139737467184777ea822f593.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/postmaster.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 892d42c63ee..918363c38bc 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -1158,6 +1158,17 @@ PostmasterMain(int argc, char *argv[])
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
*/
SysLoggerPID = SysLogger_Start();
@@ -1191,15 +1202,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;