diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2013-01-02 14:39:11 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2013-01-02 14:39:11 -0300 |
commit | dfbba2c86cc8f09cf3ffca3d305b4ce54a7fb49a (patch) | |
tree | 55c6fcee0599a5a1fadbca91c2b448f326b3895d /src/backend/utils/init/postinit.c | |
parent | cdbc0ca48ca96e5c787b1605ed2d6cf7407a5acf (diff) | |
download | postgresql-dfbba2c86cc8f09cf3ffca3d305b4ce54a7fb49a.tar.gz postgresql-dfbba2c86cc8f09cf3ffca3d305b4ce54a7fb49a.zip |
Make sure MaxBackends is always set
Auxiliary and bootstrap processes weren't getting it, causing initdb to
fail completely.
Diffstat (limited to 'src/backend/utils/init/postinit.c')
-rw-r--r-- | src/backend/utils/init/postinit.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 0fbf65f7340..3948eac039b 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -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. |