diff options
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. |