diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2017-09-25 16:09:20 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2017-09-25 16:09:20 -0400 |
commit | 1750612224704043218fac81e29c05d866e866ce (patch) | |
tree | aabaf1651ec4b2f3578e97f49d2f41efc4b1277a /src/backend/executor/nodeBitmapHeapscan.c | |
parent | 10aafbdbe4224846095198644a1169807ab9b391 (diff) | |
download | postgresql-1750612224704043218fac81e29c05d866e866ce.tar.gz postgresql-1750612224704043218fac81e29c05d866e866ce.zip |
Avoid SIGBUS on Linux when a DSM memory request overruns tmpfs.
On Linux, shared memory segments created with shm_open() are backed by
swap files created in tmpfs. If the swap file needs to be extended,
but there's no tmpfs space left, you get a very unfriendly SIGBUS trap.
To avoid this, force allocation of the full request size when we create
the segment. This adds a few cycles, but none that we wouldn't expend
later anyway, assuming the request isn't hugely bigger than the actual
need.
Make this code #ifdef __linux__, because (a) there's not currently a
reason to think the same problem exists on other platforms, and (b)
applying posix_fallocate() to an FD created by shm_open() isn't very
portable anyway.
Back-patch to 9.4 where the DSM code came in.
Thomas Munro, per a bug report from Amul Sul
Discussion: https://postgr.es/m/1002664500.12301802.1471008223422.JavaMail.yahoo@mail.yahoo.com
Diffstat (limited to 'src/backend/executor/nodeBitmapHeapscan.c')
0 files changed, 0 insertions, 0 deletions