aboutsummaryrefslogtreecommitdiff
path: root/src/include/storage/procnumber.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/storage/procnumber.h')
-rw-r--r--src/include/storage/procnumber.h13
1 files changed, 13 insertions, 0 deletions
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;