Hi all,
(Heikki in CC.)

After b0bea38705b2, I have noticed that the syslogger is generating a
lot of dummy LOG entries:
2023-08-28 09:40:52.565 JST [24554]
LOG:  could not close client or listen socket: Bad file descriptor  

The only reason why I have noticed this issue is because I enable the
logging collector in my development scripts.  Note that the pg_ctl
test 004_logrotate.pl, the only one with logging_collector set, is
equally able to reproduce the issue.

The root of the problem is ClosePostmasterPorts() in syslogger.c,
where we close the postmaster ports, but all of them are still set at
0, leading to these spurious logs.

From what I can see, this is is a rather old issue, because
ListenSocket[] is filled with PGINVALID_SOCKET *after* starting the
syslogger.  It seems to me that we should just initialize the array
before starting the syslogger, so as we don't get these incorrect
logs?

Thoughts?  Please see the attached.
--
Michael
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 41bccb46a8..acd46718fc 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -1141,6 +1141,17 @@ PostmasterMain(int argc, char *argv[])
 				 errmsg("could not remove file \"%s\": %m",
 						LOG_METAINFO_DATAFILE)));
 
+	/*
+	 * 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 enabled, start up syslogger collection subprocess
 	 */
@@ -1173,17 +1184,6 @@ PostmasterMain(int argc, char *argv[])
 	ereport(LOG,
 			(errmsg("starting %s", PG_VERSION_STR)));
 
-	/*
-	 * 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;

Attachment: signature.asc
Description: PGP signature

Reply via email to