From 07bf37850991c68a7038fb06186bddfd64c72faf Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Thu, 5 Aug 2021 12:36:06 -0700 Subject: [PATCH] process startup: Centralize pgwin32_signal_initialize() calls. For one, the existing location lead to somewhat awkward code in main(). For another, the new location is easier to understand anyway. Author: Andres Freund Reviewed-By: Kyotaro Horiguchi Reviewed-By: Robert Haas Discussion: https://postgr.es/m/20210802164124.ufo5buo4apl6yuvs@alap3.anarazel.de --- src/backend/main/main.c | 29 +++++++++-------------------- src/backend/postmaster/postmaster.c | 9 --------- src/backend/utils/init/miscinit.c | 19 ++++++++++++++++++- 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/src/backend/main/main.c b/src/backend/main/main.c index 9be3973956..3a2a0d598c 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -181,35 +181,24 @@ main(int argc, char *argv[]) * Dispatch to one of various subprograms depending on first argument. */ -#ifdef EXEC_BACKEND - if (argc > 1 && strncmp(argv[1], "--fork", 6) == 0) - SubPostmasterMain(argc, argv); /* does not return */ -#endif - -#ifdef WIN32 - - /* - * Start our win32 signal implementation - * - * SubPostmasterMain() will do this for itself, but the remaining modes - * need it here - */ - pgwin32_signal_initialize(); -#endif - if (argc > 1 && strcmp(argv[1], "--check") == 0) BootstrapModeMain(argc, argv, true); else if (argc > 1 && strcmp(argv[1], "--boot") == 0) BootstrapModeMain(argc, argv, false); +#ifdef EXEC_BACKEND + else if (argc > 1 && strncmp(argv[1], "--fork", 6) == 0) + SubPostmasterMain(argc, argv); +#endif else if (argc > 1 && strcmp(argv[1], "--describe-config") == 0) - GucInfoMain(); /* does not return */ + GucInfoMain(); else if (argc > 1 && strcmp(argv[1], "--single") == 0) PostgresMain(argc, argv, NULL, /* no dbname */ - strdup(get_user_name_or_exit(progname))); /* does not return */ + strdup(get_user_name_or_exit(progname))); else - PostmasterMain(argc, argv); /* does not return */ - abort(); /* should not get here */ + PostmasterMain(argc, argv); + /* the functions above should not return */ + abort(); } diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 3864691215..18504765c2 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -4905,15 +4905,6 @@ SubPostmasterMain(int argc, char *argv[]) /* Close the postmaster's sockets (as soon as we know them) */ ClosePostmasterPorts(strcmp(argv[1], "--forklog") == 0); - /* - * Start our win32 signal implementation. This has to be done after we - * read the backend variables, because we need to pick up the signal pipe - * from the parent process. - */ -#ifdef WIN32 - pgwin32_signal_initialize(); -#endif - /* Setup as postmaster child */ InitPostmasterChild(); diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 8b73850d0d..88801374b5 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -87,13 +87,23 @@ bool IgnoreSystemIndexes = false; /* * Initialize the basic environment for a postmaster child * - * Should be called as early as possible after the child's startup. + * Should be called as early as possible after the child's startup. However, + * on EXEC_BACKEND builds it does need to be after read_backend_variables(). */ void InitPostmasterChild(void) { IsUnderPostmaster = true; /* we are a postmaster subprocess now */ + /* + * Start our win32 signal implementation. This has to be done after we + * read the backend variables, because we need to pick up the signal pipe + * from the parent process. + */ +#ifdef WIN32 + pgwin32_signal_initialize(); +#endif + /* * Set reference point for stack-depth checking. We re-do that even in the * !EXEC_BACKEND case, because there are some edge cases where processes @@ -166,6 +176,13 @@ InitStandaloneProcess(const char *argv0) { Assert(!IsPostmasterEnvironment); + /* + * Start our win32 signal implementation + */ +#ifdef WIN32 + pgwin32_signal_initialize(); +#endif + InitProcessGlobals(); /* Initialize process-local latch support */