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 <andres@anarazel.de>
Reviewed-By: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Reviewed-By: Robert Haas <robertmhaas@gmail.com>
Discussion: https://postgr.es/m/20210802164124.ufo5buo4apl6yuvs@alap3.anarazel.de
This commit is contained in:
Andres Freund 2021-08-05 12:36:06 -07:00
parent f8dd4ecb0b
commit 07bf378509
3 changed files with 27 additions and 30 deletions

View File

@ -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();
}

View File

@ -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();

View File

@ -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 */