pgsql: In the postmaster, rely on the signal infrastructure to block si - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: In the postmaster, rely on the signal infrastructure to block si
Date
Msg-id E1kT6TE-0002Jn-N0@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
In the postmaster, rely on the signal infrastructure to block signals.

POSIX sigaction(2) can be told to block a set of signals while a
signal handler executes.  Make use of that instead of manually
blocking and unblocking signals in the postmaster's signal handlers.
This should save a few cycles, but more importantly it prevents
recursive invocation of signal handlers when many signals arrive in
close succession.  (Assuming that the platform's signal infrastructure
is designed to avoid consuming stack space in that case, but this is
demonstrably true at least on Linux.)  The existing code has been seen
to recurse to the point of stack overflow, either in the postmaster
or in a forked-off child.

Back-patch of commit 9abb2bfc0.  At the time, we'd only seen excess
postmaster stack consumption in the buildfarm; but we now have a
user report of it, and that commit has aged enough to have a fair
amount of confidence that it doesn't break anything.

This still doesn't change anything about the way that it works on
Windows.  Perhaps someone else would like to fix that?

Per bug #16673 from David Geier.  Back-patch to 9.6.  Although
the problem exists in principle before that, we've only seen it
actually materialize in connection with heavy use of parallel
workers, so it doesn't seem necessary to do anything in 9.5;
and the relevant code is different there, too.

Discussion: https://postgr.es/m/16673-d278c604f8e34ec0@postgresql.org
Discussion: https://postgr.es/m/14878.1570820201@sss.pgh.pa.us

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/8b53dbada4a6a9e5f16548ca2c4d17cff55933d8

Modified Files
--------------
src/backend/libpq/pqsignal.c        | 49 +++++++++++++++++++++
src/backend/postmaster/postmaster.c | 87 +++++++++++++++++++++++++++----------
src/include/libpq/pqsignal.h        |  3 ++
src/include/port.h                  |  5 ---
src/port/pqsignal.c                 | 29 -------------
5 files changed, 116 insertions(+), 57 deletions(-)


pgsql-committers by date:

Previous
From: Alvaro Herrera
Date:
Subject: pgsql: Install pg_isolation_regress and isolationtester
Next
From: Alvaro Herrera
Date:
Subject: pgsql: Remove pointless HeapTupleHeaderIndicatesMovedPartitions calls