From: Thomas Munro Date: Thu, 14 Jul 2022 13:23:29 +0000 (+1200) Subject: Don't clobber postmaster sigmask in dsm_impl_resize. X-Git-Tag: REL_11_17~37 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=74a9ee034829153c3d5bfa270fd6372aa3147db5;p=thirdparty%2Fpostgresql.git Don't clobber postmaster sigmask in dsm_impl_resize. Commit 4518c798 intended to block signals in regular backends that allocate DSM segments, but dsm_impl_resize() is also reached by dsm_postmaster_startup(). It's not OK to clobber the postmaster's signal mask, so only manipulate the signal mask when under the postmaster. Back-patch to all releases, like 4518c798. Discussion: https://postgr.es/m/CA%2BhUKGKNpK%3D2OMeea_AZwpLg7Bm4%3DgYWk7eDjZ5F6YbozfOf8w%40mail.gmail.com --- diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c index 6cbfff87a1e..11d8f601037 100644 --- a/src/backend/storage/ipc/dsm_impl.c +++ b/src/backend/storage/ipc/dsm_impl.c @@ -417,7 +417,8 @@ dsm_impl_posix_resize(int fd, off_t size) * allowed SIGUSR1 to interrupt us repeatedly (for example, due to recovery * conflicts), the retry loop might never succeed. */ - PG_SETMASK(&BlockSig); + if (IsUnderPostmaster) + PG_SETMASK(&BlockSig); /* Truncate (or extend) the file to the requested size. */ do @@ -455,9 +456,12 @@ dsm_impl_posix_resize(int fd, off_t size) } #endif /* HAVE_POSIX_FALLOCATE && __linux__ */ - save_errno = errno; - PG_SETMASK(&UnBlockSig); - errno = save_errno; + if (IsUnderPostmaster) + { + save_errno = errno; + PG_SETMASK(&UnBlockSig); + errno = save_errno; + } return rc; }