summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2021-10-26 12:54:55 +1300
committerThomas Munro <tmunro@postgresql.org>2021-10-26 13:01:52 +1300
commit8fef901e3fe2119c434c93c9f05063633a43eaad (patch)
treef12bd180e823349b7eaced89046abe0c65815adf
parent90eb17088a3659d0a60f3d1d59cef9325705aa81 (diff)
Reject huge_pages=on if shared_memory_type=sysv.
It doesn't work (it could, but hasn't been implemented). Back-patch to 12, where shared_memory_type arrived. Reported-by: Alexander Lakhin <exclusion@gmail.com> Reviewed-by: Alexander Lakhin <exclusion@gmail.com> Discussion: https://postgr.es/m/163271880203.22789.1125998876173795966@wrigleys.postgresql.org
-rw-r--r--doc/src/sgml/config.sgml4
-rw-r--r--src/backend/port/sysv_shmem.c6
2 files changed, 9 insertions, 1 deletions
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 505a263301d..fd015cf6baa 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -1573,7 +1573,9 @@ include_dir 'conf.d'
<para>
At present, this setting is supported only on Linux and Windows. The
setting is ignored on other systems when set to
- <literal>try</literal>.
+ <literal>try</literal>. On Linux, it is only supported when
+ <varname>shared_memory_type</varname> is set to <literal>mmap</literal>
+ (the default).
</para>
<para>
diff --git a/src/backend/port/sysv_shmem.c b/src/backend/port/sysv_shmem.c
index 3267648c959..bbe1a682acb 100644
--- a/src/backend/port/sysv_shmem.c
+++ b/src/backend/port/sysv_shmem.c
@@ -649,6 +649,12 @@ PGSharedMemoryCreate(Size size, int port,
errmsg("huge pages not supported on this platform")));
#endif
+ /* For now, we don't support huge pages in SysV memory */
+ if (huge_pages == HUGE_PAGES_ON && shared_memory_type != SHMEM_TYPE_MMAP)
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("huge pages not supported with the current shared_memory_type setting")));
+
/* Room for a header? */
Assert(size > MAXALIGN(sizeof(PGShmemHeader)));