* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.260 2010/02/26 02:00:35 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.261 2010/04/20 01:38:52 tgl Exp $
*
*-------------------------------------------------------------------------
*/
switch (auxType)
{
case CheckerProcess:
- bootstrap_signals();
+ /* don't set signals, they're useless here */
CheckerModeMain();
proc_exit(1); /* should never return */
case BootstrapProcess:
bootstrap_signals();
BootStrapXLOG();
- StartupXLOG();
BootstrapModeMain();
proc_exit(1); /* should never return */
/*
* In shared memory checker mode, all we really want to do is create shared
* memory and semaphores (just to prove we can do it with the current GUC
- * settings).
+ * settings). Since, in fact, that was already done by BaseInit(),
+ * we have nothing more to do here.
*/
static void
CheckerModeMain(void)
{
- /*
- * We must be getting invoked for bootstrap mode
- */
- Assert(!IsUnderPostmaster);
-
- SetProcessingMode(BootstrapProcessing);
-
- /*
- * Do backend-like initialization for bootstrap mode
- */
- InitProcess();
- InitPostgres(NULL, InvalidOid, NULL, NULL);
proc_exit(0);
}
* Do backend-like initialization for bootstrap mode
*/
InitProcess();
+
InitPostgres(NULL, InvalidOid, NULL, NULL);
/* Initialize stuff for bootstrap-file processing */
*/
RelationMapFinishBootstrap();
- /* Perform a checkpoint to ensure everything's down to disk */
- SetProcessingMode(NormalProcessing);
- CreateCheckPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_IMMEDIATE);
-
/* Clean up and exit */
cleanup();
proc_exit(0);
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.592 2010/03/21 00:17:58 petere Exp $
+ * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.593 2010/04/20 01:38:52 tgl Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
PG_SETMASK(&BlockSig); /* block everything except SIGQUIT */
- if (IsUnderPostmaster)
- {
- BaseInit();
- }
- else
+ if (!IsUnderPostmaster)
{
/*
* Validate we have been given a reasonable-looking DataDir (if under
* Create lockfile for data directory.
*/
CreateDataDirLockFile(false);
-
- BaseInit();
-
- /*
- * Start up xlog for standalone backend, and register to have it
- * closed down at exit.
- */
- StartupXLOG();
- on_shmem_exit(ShutdownXLOG, 0);
}
+ /* Early initialization */
+ BaseInit();
+
/*
* Create a per-backend PGPROC struct in shared memory, except in the
* EXEC_BACKEND case where this was done in SubPostmasterMain. We must do
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.208 2010/03/25 20:40:17 sriggs Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.209 2010/04/20 01:38:52 tgl Exp $
*
*
*-------------------------------------------------------------------------
* Early initialization of a backend (either standalone or under postmaster).
* This happens even before InitPostgres.
*
- * If you're wondering why this is separate from InitPostgres at all:
- * the critical distinction is that this stuff has to happen before we can
- * run XLOG-related initialization, which is done before InitPostgres --- in
- * fact, for cases such as the background writer process, InitPostgres may
- * never be done at all.
+ * This is separate from InitPostgres because it is also called by auxiliary
+ * processes, such as the background writer process, which may not call
+ * InitPostgres at all.
*/
void
BaseInit(void)
InitBufferPoolBackend();
/*
- * Initialize local process's access to XLOG, if appropriate. In
- * bootstrap case we skip this since StartupXLOG() was run instead.
+ * Initialize local process's access to XLOG.
*/
- if (!bootstrap)
+ if (IsUnderPostmaster)
+ {
+ /*
+ * The postmaster already started the XLOG machinery, but we need
+ * to call InitXLOGAccess(), if the system isn't in hot-standby mode.
+ * This is handled by calling RecoveryInProgress and ignoring the
+ * result.
+ */
(void) RecoveryInProgress();
+ }
+ else
+ {
+ /*
+ * We are either a bootstrap process or a standalone backend.
+ * Either way, start up the XLOG machinery, and register to have it
+ * closed down at exit.
+ */
+ StartupXLOG();
+ on_shmem_exit(ShutdownXLOG, 0);
+ }
/*
* Initialize the relation cache and the system catalog caches. Note that