aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2022-07-15 01:23:29 +1200
committerThomas Munro <tmunro@postgresql.org>2022-07-15 02:06:01 +1200
commita05f40ef874b95a39471db68a313076cd94e256f (patch)
tree2c8f67eb13bba4001c051d6e912e817fcc3723a3 /src
parentff78bf796d8069002eb75edd0d5fc7fc6bf0a63b (diff)
downloadpostgresql-a05f40ef874b95a39471db68a313076cd94e256f.tar.gz
postgresql-a05f40ef874b95a39471db68a313076cd94e256f.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
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/ipc/dsm_impl.c12
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 69567fc5a22..c7e15c09a7b 100644
--- a/src/backend/storage/ipc/dsm_impl.c
+++ b/src/backend/storage/ipc/dsm_impl.c
@@ -352,7 +352,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
@@ -390,9 +391,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;
}