aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStephen Frost <sfrost@snowman.net>2021-03-30 12:52:56 -0400
committerStephen Frost <sfrost@snowman.net>2021-03-30 12:52:56 -0400
commit4753ef37e0eda4ba0af614022d18fcbc5a946cc9 (patch)
tree6a0986976b4e9b85f1525734e87b95a91f268998 /src
parent54bb91c30e3964fd81059e6b02e377cc9dd2d64c (diff)
downloadpostgresql-4753ef37e0eda4ba0af614022d18fcbc5a946cc9.tar.gz
postgresql-4753ef37e0eda4ba0af614022d18fcbc5a946cc9.zip
Use a WaitLatch for vacuum/autovacuum sleeping
Instead of using pg_usleep() in vacuum_delay_point(), use a WaitLatch. This has the advantage that we will realize if the postmaster has been killed since the last time we decided to sleep while vacuuming. Reviewed-by: Thomas Munro Discussion: https://postgr.es/m/CAFh8B=kcdk8k-Y21RfXPu5dX=bgPqJ8TC3p_qxR_ygdBS=JN5w@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/vacuum.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index c064352e237..662aff04b45 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -2080,9 +2080,11 @@ vacuum_delay_point(void)
if (msec > VacuumCostDelay * 4)
msec = VacuumCostDelay * 4;
- pgstat_report_wait_start(WAIT_EVENT_VACUUM_DELAY);
- pg_usleep((long) (msec * 1000));
- pgstat_report_wait_end();
+ (void) WaitLatch(MyLatch,
+ WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH,
+ msec,
+ WAIT_EVENT_VACUUM_DELAY);
+ ResetLatch(MyLatch);
VacuumCostBalance = 0;