From 2be82dcf17a18511df5153bcafe67a9c1387be1e Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Tue, 13 Jan 2015 21:02:47 +0100 Subject: [PATCH] Make logging_collector=on work with non-windows EXEC_BACKEND again. Commit b94ce6e80 reordered postmaster's startup sequence so that the tempfile directory is only cleaned up after all the necessary state for pg_ctl is collected. Unfortunately the chosen location is after the syslogger has been started; which normally is fine, except for !WIN32 EXEC_BACKEND builds, which pass information to children via files in the temp directory. Move the call to RemovePgTempFiles() to just before the syslogger has started. That's the first child we fork. Luckily EXEC_BACKEND is pretty much only used by endusers on windows, which has a separate method to pass information to children. That means the real world impact of this bug is very small. Discussion: 20150113182344.GF12272@alap3.anarazel.de Backpatch to 9.1, just as the previous commit was. --- src/backend/postmaster/postmaster.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index e2b3b8114d..8570e75d8a 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -1140,6 +1140,12 @@ PostmasterMain(int argc, char *argv[]) on_proc_exit(unlink_external_pid_file, 0); } + /* + * Remove old temporary files. At this point there can be no other + * Postgres processes running in this directory, so this should be safe. + */ + RemovePgTempFiles(); + /* * If enabled, start up syslogger collection subprocess */ @@ -1197,13 +1203,6 @@ PostmasterMain(int argc, char *argv[]) */ } - - /* - * Remove old temporary files. At this point there can be no other - * Postgres processes running in this directory, so this should be safe. - */ - RemovePgTempFiles(); - #ifdef HAVE_PTHREAD_IS_THREADED_NP /* @@ -5869,7 +5868,7 @@ read_backend_variables(char *id, Port *port) fp = AllocateFile(id, PG_BINARY_R); if (!fp) { - write_stderr("could not read from backend variables file \"%s\": %s\n", + write_stderr("could not open backend variables file \"%s\": %s\n", id, strerror(errno)); exit(1); } -- 2.40.0