Don't leak a signalfd when using latches in the postmaster.

At the time of commit 6a2a70a02 we didn't use latch infrastructure in
the postmaster.  We're planning to start doing that, so we'd better make
sure that the signalfd inherited from a postmaster is not duplicated and
then leaked in the child.

Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Justin Pryzby <pryzby@telsasoft.com>
Discussion: https://postgr.es/m/CA%2BhUKG%2BZ-HpOj1JsO9eWUP%2Bar7npSVinsC_npxSy%2BjdOMsx%3DGg%40mail.gmail.com
This commit is contained in:
Thomas Munro 2022-12-23 20:24:41 +13:00
parent 30829e52ff
commit 1f0019de2f
1 changed files with 16 additions and 0 deletions

View File

@ -283,6 +283,22 @@ InitializeLatchSupport(void)
#ifdef WAIT_USE_SIGNALFD
sigset_t signalfd_mask;
if (IsUnderPostmaster)
{
/*
* It would probably be safe to re-use the inherited signalfd since
* signalfds only see the current process's pending signals, but it
* seems less surprising to close it and create our own.
*/
if (signal_fd != -1)
{
/* Release postmaster's signal FD; ignore any error */
(void) close(signal_fd);
signal_fd = -1;
ReleaseExternalFD();
}
}
/* Block SIGURG, because we'll receive it through a signalfd. */
sigaddset(&UnBlockSig, SIGURG);