diff options
author | Stephen Frost <sfrost@snowman.net> | 2021-03-30 12:52:56 -0400 |
---|---|---|
committer | Stephen Frost <sfrost@snowman.net> | 2021-03-30 12:52:56 -0400 |
commit | 4753ef37e0eda4ba0af614022d18fcbc5a946cc9 (patch) | |
tree | 6a0986976b4e9b85f1525734e87b95a91f268998 /src | |
parent | 54bb91c30e3964fd81059e6b02e377cc9dd2d64c (diff) | |
download | postgresql-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.c | 8 |
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; |