aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2025-02-24 05:39:17 -0500
committerAndres Freund <andres@anarazel.de>2025-02-24 06:23:41 -0500
commit6394a3a61c0deae34ad9e94505d319cebe9e09a1 (patch)
treeda5a4d71d31eff6d36e3455a05ce2ab7a0c4b9c1 /src
parent0600d276d485a8222eb6b571b08889c9f539e86f (diff)
downloadpostgresql-6394a3a61c0deae34ad9e94505d319cebe9e09a1.tar.gz
postgresql-6394a3a61c0deae34ad9e94505d319cebe9e09a1.zip
Move MAX_BACKENDS to procnumber.h
MAX_BACKENDS influences many things besides postmaster. I e.g. noticed that we don't have static assertions ensuring BUF_REFCOUNT_MASK is big enough for MAX_BACKENDS, adding them would require including postmaster.h in buf_internals.h which doesn't seem right. While at that, add MAX_BACKENDS_BITS, as that's useful in various places for static assertions (to be added in subsequent commits). Reviewed-by: Thomas Munro <thomas.munro@gmail.com> Discussion: https://postgr.es/m/wptizm4qt6yikgm2pt52xzyv6ycmqiutloyvypvmagn7xvqkce@d4xuv3mylpg4
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/lmgr/lwlock.c2
-rw-r--r--src/backend/utils/adt/xid8funcs.c2
-rw-r--r--src/backend/utils/init/postinit.c1
-rw-r--r--src/backend/utils/misc/guc_tables.c1
-rw-r--r--src/include/postmaster/postmaster.h12
-rw-r--r--src/include/storage/procnumber.h13
6 files changed, 17 insertions, 14 deletions
diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c
index 8a7fb6a22c6..79cc48b23c4 100644
--- a/src/backend/storage/lmgr/lwlock.c
+++ b/src/backend/storage/lmgr/lwlock.c
@@ -80,9 +80,9 @@
#include "pg_trace.h"
#include "pgstat.h"
#include "port/pg_bitutils.h"
-#include "postmaster/postmaster.h"
#include "storage/proc.h"
#include "storage/proclist.h"
+#include "storage/procnumber.h"
#include "storage/spin.h"
#include "utils/memutils.h"
diff --git a/src/backend/utils/adt/xid8funcs.c b/src/backend/utils/adt/xid8funcs.c
index 20b28b2528c..88d798fbf4b 100644
--- a/src/backend/utils/adt/xid8funcs.c
+++ b/src/backend/utils/adt/xid8funcs.c
@@ -32,9 +32,9 @@
#include "lib/qunique.h"
#include "libpq/pqformat.h"
#include "miscadmin.h"
-#include "postmaster/postmaster.h"
#include "storage/lwlock.h"
#include "storage/procarray.h"
+#include "storage/procnumber.h"
#include "utils/builtins.h"
#include "utils/memutils.h"
#include "utils/snapmgr.h"
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index 01bb6a410cb..318600d6d02 100644
--- a/src/backend/utils/init/postinit.c
+++ b/src/backend/utils/init/postinit.c
@@ -49,6 +49,7 @@
#include "storage/lmgr.h"
#include "storage/proc.h"
#include "storage/procarray.h"
+#include "storage/procnumber.h"
#include "storage/procsignal.h"
#include "storage/sinvaladt.h"
#include "storage/smgr.h"
diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c
index 3f1c7b1ebf6..690bf96ef03 100644
--- a/src/backend/utils/misc/guc_tables.c
+++ b/src/backend/utils/misc/guc_tables.c
@@ -77,6 +77,7 @@
#include "storage/large_object.h"
#include "storage/pg_shmem.h"
#include "storage/predicate.h"
+#include "storage/procnumber.h"
#include "storage/standby.h"
#include "tcop/backend_startup.h"
#include "tcop/tcopprot.h"
diff --git a/src/include/postmaster/postmaster.h b/src/include/postmaster/postmaster.h
index d8a9f14b3b8..b6a3f275a1b 100644
--- a/src/include/postmaster/postmaster.h
+++ b/src/include/postmaster/postmaster.h
@@ -127,18 +127,6 @@ extern bool ReleasePostmasterChildSlot(PMChild *pmchild);
extern PMChild *FindPostmasterChildByPid(int pid);
/*
- * Note: MAX_BACKENDS is limited to 2^18-1 because that's the width reserved
- * for buffer references in buf_internals.h. This limitation could be lifted
- * by using a 64bit state; but it's unlikely to be worthwhile as 2^18-1
- * backends exceed currently realistic configurations. Even if that limitation
- * were removed, we still could not a) exceed 2^23-1 because inval.c stores
- * the ProcNumber as a 3-byte signed integer, b) INT_MAX/4 because some places
- * compute 4*MaxBackends without any overflow check. This is rechecked in the
- * relevant GUC check hooks and in RegisterBackgroundWorker().
- */
-#define MAX_BACKENDS 0x3FFFF
-
-/*
* These values correspond to the special must-be-first options for dispatching
* to various subprograms. parse_dispatch_option() can be used to convert an
* option name to one of these values.
diff --git a/src/include/storage/procnumber.h b/src/include/storage/procnumber.h
index 7cf981ab673..75c2c7a17c0 100644
--- a/src/include/storage/procnumber.h
+++ b/src/include/storage/procnumber.h
@@ -26,6 +26,19 @@ typedef int ProcNumber;
#define INVALID_PROC_NUMBER (-1)
/*
+ * Note: MAX_BACKENDS_BITS is 18 as that is the space available for buffer
+ * refcounts in buf_internals.h. This limitation could be lifted by using a
+ * 64bit state; but it's unlikely to be worthwhile as 2^18-1 backends exceed
+ * currently realistic configurations. Even if that limitation were removed,
+ * we still could not a) exceed 2^23-1 because inval.c stores the ProcNumber
+ * as a 3-byte signed integer, b) INT_MAX/4 because some places compute
+ * 4*MaxBackends without any overflow check. This is rechecked in the
+ * relevant GUC check hooks and in RegisterBackgroundWorker().
+ */
+#define MAX_BACKENDS_BITS 18
+#define MAX_BACKENDS ((1U << MAX_BACKENDS_BITS)-1)
+
+/*
* Proc number of this backend (same as GetNumberFromPGProc(MyProc))
*/
extern PGDLLIMPORT ProcNumber MyProcNumber;