* 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();
}
/* 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();
/*
* 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
{
Assert(!IsPostmasterEnvironment);
+ /*
+ * Start our win32 signal implementation
+ */
+#ifdef WIN32
+ pgwin32_signal_initialize();
+#endif
+
InitProcessGlobals();
/* Initialize process-local latch support */