postgres.git / summary / log / commit / refs

commit    a05f40ef874b95a39471db68a313076cd94e256f
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 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; } [parent: ff78bf796d80]