diff options
Diffstat (limited to 'src/backend/storage/aio/method_worker.c')
-rw-r--r-- | src/backend/storage/aio/method_worker.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/backend/storage/aio/method_worker.c b/src/backend/storage/aio/method_worker.c index 2be6bb8972b..4a7853d13fa 100644 --- a/src/backend/storage/aio/method_worker.c +++ b/src/backend/storage/aio/method_worker.c @@ -477,6 +477,13 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len) MyIoWorkerId); /* + * Prevent interrupts between pgaio_io_reopen() and + * pgaio_io_perform_synchronously() that otherwise could lead to + * the FD getting closed in that window. + */ + HOLD_INTERRUPTS(); + + /* * It's very unlikely, but possible, that reopen fails. E.g. due * to memory allocations failing or file permissions changing or * such. In that case we need to fail the IO. @@ -502,6 +509,8 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len) * ensure we don't accidentally fail. */ pgaio_io_perform_synchronously(ioh); + + RESUME_INTERRUPTS(); } else { |