postgres.git / summary / log / commit / refs
commit 74a9ee034829153c3d5bfa270fd6372aa3147db5
Author: Thomas Munro <tmunro@postgresql.org>
Date: Thu Jul 14 13:23:29 2022 +0000
First released in: 16.0, 10.22, 11.17, 12.12, 13.8, 14.5, 15.0
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
src/backend/storage/ipc/dsm_impl.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
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;
}
[parent: 39683c69a03e]