1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-30 21:42:05 +03:00

Make sure MaxBackends is always set

Auxiliary and bootstrap processes weren't getting it, causing initdb to
fail completely.
This commit is contained in:
Alvaro Herrera
2013-01-02 14:39:11 -03:00
parent cdbc0ca48c
commit dfbba2c86c
3 changed files with 25 additions and 6 deletions

View File

@ -421,6 +421,26 @@ pg_split_opts(char **argv, int *argcp, char *optstr)
}
}
/*
* Initialize MaxBackends value from config options.
*
* This must be called after modules have had the chance to register background
* workers in shared_preload_libraries, and before shared memory size is
* determined.
*/
void
InitializeMaxBackends(void)
{
Assert(MaxBackends == 0);
/* the extra unit accounts for the autovacuum launcher */
MaxBackends = MaxConnections + autovacuum_max_workers + 1 +
GetNumShmemAttachedBgworkers();
/* internal error because the values were all checked previously */
if (MaxBackends > MAX_BACKENDS)
elog(ERROR, "too many backends configured");
}
/*
* Early initialization of a backend (either standalone or under postmaster).
@ -433,6 +453,8 @@ pg_split_opts(char **argv, int *argcp, char *optstr)
void
BaseInit(void)
{
InitializeMaxBackends();
/*
* Attach to shared memory and semaphores, and initialize our
* input/output/debugging file descriptors.