On 2022-Jul-01, Andres Freund wrote: > On 2022-07-01 19:55:16 +0200, Alvaro Herrera wrote: > > On 2022-Jul-01, Andres Freund wrote:
> > > What is the reason for the || ProcDiePending || QueryCancelPending bit? > > > What > > > if there's dsm operations intentionally done while QueryCancelPending? > > > > That mirrors the test for the other block in that function, which was > > added by 63efab4ca139, whose commit message explains: > That whole approach seems quite wrong to me. At the absolute very least the > code needs to check if interrupts are being processed in the current context > before just giving up due to ProcDiePending || QueryCancelPending. For the time being, I can just push the addition of the EINTR retry without testing ProcDiePending || QueryCancelPending. -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/ "El sudor es la mejor cura para un pensamiento enfermo" (Bardia)
>From b7591beb919c3cfaa8090bda3977b7127de8de28 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera <alvhe...@alvh.no-ip.org> Date: Fri, 1 Jul 2022 17:16:33 +0200 Subject: [PATCH v3] retry ftruncate --- src/backend/storage/ipc/dsm_impl.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c index 82b7978aeb..145a02204b 100644 --- a/src/backend/storage/ipc/dsm_impl.c +++ b/src/backend/storage/ipc/dsm_impl.c @@ -417,8 +417,19 @@ dsm_impl_posix_resize(int fd, off_t size) { int rc; - /* Truncate (or extend) the file to the requested size. */ - rc = ftruncate(fd, size); + /* + * Truncate (or extend) the file to the requested size. If we're + * interrupted by a signal, retry; have caller handle any other error. + */ + for (;;) + { + errno = 0; + rc = ftruncate(fd, size); + if (rc == 0) + break; + if (errno != EINTR) + return rc; + } /* * On Linux, a shm_open fd is backed by a tmpfs file. After resizing with -- 2.30.2