diff options
author | Thomas Munro <tmunro@postgresql.org> | 2022-07-15 01:23:29 +1200 |
---|---|---|
committer | Thomas Munro <tmunro@postgresql.org> | 2022-07-15 02:04:53 +1200 |
commit | 17aa39da50c5ac37436522fe2dd9f25a93673fdd (patch) | |
tree | cbc6c062b31945dd5dc2e44cab2be3c47794b366 | |
parent | e73fe6e828d141b0ee0be8d7f58d73b3f0fad872 (diff) | |
download | postgresql-17aa39da50c5ac37436522fe2dd9f25a93673fdd.tar.gz postgresql-17aa39da50c5ac37436522fe2dd9f25a93673fdd.zip |
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
-rw-r--r-- | src/backend/storage/ipc/dsm_impl.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c index f752cb73f56..f9a6414ce83 100644 --- a/src/backend/storage/ipc/dsm_impl.c +++ b/src/backend/storage/ipc/dsm_impl.c @@ -359,7 +359,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 @@ -399,9 +400,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; } |