diff options
Diffstat (limited to 'src/backend/postmaster')
| -rw-r--r-- | src/backend/postmaster/autovacuum.c | 4 | ||||
| -rw-r--r-- | src/backend/postmaster/checkpointer.c | 7 | ||||
| -rw-r--r-- | src/backend/postmaster/interrupt.c | 4 | ||||
| -rw-r--r-- | src/backend/postmaster/pgstat.c | 3 | ||||
| -rw-r--r-- | src/backend/postmaster/startup.c | 6 |
5 files changed, 23 insertions, 1 deletions
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 7fe9e1d440a..e919317bab9 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -820,6 +820,10 @@ HandleAutoVacLauncherInterrupts(void) rebuild_database_list(InvalidOid); } + /* Process barrier events */ + if (ProcSignalBarrierPending) + ProcessProcSignalBarrier(); + /* Process sinval catchup interrupts that happened while sleeping */ ProcessCatchupInterrupt(); } diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index 014b9e5289c..9b2277d4aee 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -524,6 +524,9 @@ CheckpointerMain(void) static void HandleCheckpointerInterrupts(void) { + if (ProcSignalBarrierPending) + ProcessProcSignalBarrier(); + if (ConfigReloadPending) { ConfigReloadPending = false; @@ -710,6 +713,10 @@ CheckpointWriteDelay(int flags, double progress) AbsorbSyncRequests(); absorb_counter = WRITES_PER_ABSORB; } + + /* Check for barrier events. */ + if (ProcSignalBarrierPending) + ProcessProcSignalBarrier(); } /* diff --git a/src/backend/postmaster/interrupt.c b/src/backend/postmaster/interrupt.c index 6900cd02f6f..214ccaf34be 100644 --- a/src/backend/postmaster/interrupt.c +++ b/src/backend/postmaster/interrupt.c @@ -20,6 +20,7 @@ #include "postmaster/interrupt.h" #include "storage/ipc.h" #include "storage/latch.h" +#include "storage/procsignal.h" #include "utils/guc.h" volatile sig_atomic_t ConfigReloadPending = false; @@ -31,6 +32,9 @@ volatile sig_atomic_t ShutdownRequestPending = false; void HandleMainLoopInterrupts(void) { + if (ProcSignalBarrierPending) + ProcessProcSignalBarrier(); + if (ConfigReloadPending) { ConfigReloadPending = false; diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index e9315122033..7410b2ff5e9 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -3988,6 +3988,9 @@ pgstat_get_wait_io(WaitEventIO w) case WAIT_EVENT_LOGICAL_REWRITE_WRITE: event_name = "LogicalRewriteWrite"; break; + case WAIT_EVENT_PROC_SIGNAL_BARRIER: + event_name = "ProcSignalBarrier"; + break; case WAIT_EVENT_RELATION_MAP_READ: event_name = "RelationMapRead"; break; diff --git a/src/backend/postmaster/startup.c b/src/backend/postmaster/startup.c index 4f59c71f733..11f7052e788 100644 --- a/src/backend/postmaster/startup.c +++ b/src/backend/postmaster/startup.c @@ -96,7 +96,7 @@ StartupProcShutdownHandler(SIGNAL_ARGS) errno = save_errno; } -/* Handle SIGHUP and SIGTERM signals of startup process */ +/* Handle various signals that might be sent to the startup process */ void HandleStartupProcInterrupts(void) { @@ -121,6 +121,10 @@ HandleStartupProcInterrupts(void) */ if (IsUnderPostmaster && !PostmasterIsAlive()) exit(1); + + /* Process barrier events */ + if (ProcSignalBarrierPending) + ProcessProcSignalBarrier(); } |
