From 5d4f46dc13bacf9c1df79233f8e4017a9dcd6919 Mon Sep 17 00:00:00 2001 From: Dmitrii Dolgov <9erthalion6@gmail.com> Date: Tue, 17 Jun 2025 15:14:33 +0200 Subject: [PATCH v5 01/10] Process config reload in AIO workers Currenly AIO workers process interrupts only via CHECK_FOR_INTERRUPTS, which does not include ConfigReloadPending. Thus we need to check for it explicitly. --- src/backend/storage/aio/method_worker.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/backend/storage/aio/method_worker.c b/src/backend/storage/aio/method_worker.c index 36be179678d..b4d5c46fb94 100644 --- a/src/backend/storage/aio/method_worker.c +++ b/src/backend/storage/aio/method_worker.c @@ -80,6 +80,7 @@ static void pgaio_worker_shmem_init(bool first_time); static bool pgaio_worker_needs_synchronous_execution(PgAioHandle *ioh); static int pgaio_worker_submit(uint16 num_staged_ios, PgAioHandle **staged_ios); +static void pgaio_worker_process_interrupts(void); const IoMethodOps pgaio_worker_ops = { .shmem_size = pgaio_worker_shmem_size, @@ -461,6 +462,8 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len) int nwakeups = 0; int worker; + pgaio_worker_process_interrupts(); + /* * Try to get a job to do. * @@ -584,3 +587,25 @@ pgaio_workers_enabled(void) { return io_method == IOMETHOD_WORKER; } + +/* + * Process any new interrupts. + */ +static void +pgaio_worker_process_interrupts(void) +{ + /* + * Reloading config can trigger further signals, complicating interrupts + * processing -- so let it run first. + * + * XXX: Is there any need in memory barrier after ProcessConfigFile? + */ + if (ConfigReloadPending) + { + ConfigReloadPending = false; + ProcessConfigFile(PGC_SIGHUP); + } + + if (ProcSignalBarrierPending) + ProcessProcSignalBarrier(); +} -- 2.49.0