aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2021-08-05 14:37:09 -0700
committerAndres Freund <andres@anarazel.de>2021-08-05 15:36:59 -0700
commitb406478b87e2234c0be4ca4105eee3bb466a646b (patch)
treeafe7c717314d513a9c372604d010b53a601763d4 /src/backend/utils
parent0de13bbc47d19c95de132cc85c341fdab079c170 (diff)
downloadpostgresql-b406478b87e2234c0be4ca4105eee3bb466a646b.tar.gz
postgresql-b406478b87e2234c0be4ca4105eee3bb466a646b.zip
process startup: Always call Init[Auxiliary]Process() before BaseInit().
For EXEC_BACKEND InitProcess()/InitAuxiliaryProcess() needs to have been called well before we call BaseInit(), as SubPostmasterMain() needs LWLocks to work. Having the order of initialization differ between platforms makes it unnecessarily hard to understand the system and to add initialization points for new subsystems without a lot of duplication. To be able to change the order, BaseInit() cannot trigger CreateSharedMemoryAndSemaphores() anymore - obviously that needs to have happened before we can call InitProcess(). It seems cleaner to create shared memory explicitly in single user/bootstrap mode anyway. After this change the separation of bufmgr initialization into InitBufferPoolAccess() / InitBufferPoolBackend() is not meaningful anymore so the latter is removed. Author: Andres Freund <andres@anarazel.de> Reviewed-By: Kyotaro Horiguchi <horikyota.ntt@gmail.com> Discussion: https://postgr.es/m/20210802164124.ufo5buo4apl6yuvs@alap3.anarazel.de
Diffstat (limited to 'src/backend/utils')
-rw-r--r--src/backend/utils/init/postinit.c37
1 files changed, 3 insertions, 34 deletions
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index 51d1bbef301..420b246fb13 100644
--- a/src/backend/utils/init/postinit.c
+++ b/src/backend/utils/init/postinit.c
@@ -67,7 +67,6 @@ static HeapTuple GetDatabaseTuple(const char *dbname);
static HeapTuple GetDatabaseTupleByOid(Oid dboid);
static void PerformAuthentication(Port *port);
static void CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connections);
-static void InitCommunication(void);
static void ShutdownPostgres(int code, Datum arg);
static void StatementTimeoutHandler(void);
static void LockTimeoutHandler(void);
@@ -417,31 +416,6 @@ CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connect
}
-
-/* --------------------------------
- * InitCommunication
- *
- * This routine initializes stuff needed for ipc, locking, etc.
- * it should be called something more informative.
- * --------------------------------
- */
-static void
-InitCommunication(void)
-{
- /*
- * initialize shared memory and semaphores appropriately.
- */
- if (!IsUnderPostmaster) /* postmaster already did this */
- {
- /*
- * We're running a postgres bootstrap process or a standalone backend,
- * so we need to set up shmem.
- */
- CreateSharedMemoryAndSemaphores();
- }
-}
-
-
/*
* pg_split_opts -- split a string of options and append it to an argv array
*
@@ -536,11 +510,11 @@ InitializeMaxBackends(void)
void
BaseInit(void)
{
+ Assert(MyProc != NULL);
+
/*
- * Attach to shared memory and semaphores, and initialize our
- * input/output/debugging file descriptors.
+ * Initialize our input/output/debugging file descriptors.
*/
- InitCommunication();
DebugFileOpen();
/* Do local initialization of file, storage and buffer managers */
@@ -625,11 +599,6 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username,
}
/*
- * bufmgr needs another initialization call too
- */
- InitBufferPoolBackend();
-
- /*
* Initialize local process's access to XLOG.
*/
if (IsUnderPostmaster)