diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index 8d8cd30dc38..86e71e77504 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -560,6 +560,9 @@ bucket_loop: Page page; bool split_cleanup = false; + /* Delay or process interrupts before acquiring the bucket cleanup lock. */ + vacuum_delay_point(false); + /* Get address of bucket's start page */ bucket_blkno = BUCKET_TO_BLKNO(cachedmetap, cur_bucket); @@ -797,8 +800,6 @@ hashbucketcleanup(Relation rel, Bucket cur_bucket, Buffer bucket_buf, bool retain_pin = false; bool clear_dead_marking = false; - vacuum_delay_point(false); - page = BufferGetPage(buf); opaque = HashPageGetOpaque(page); diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 38539a6fd3d..d9c48842ad2 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -2439,6 +2439,9 @@ vacuum_delay_point(bool is_analyze) { double msec = 0; + Assert(InterruptHoldoffCount == 0); + Assert(CritSectionCount == 0); + /* Always check for interrupts */ CHECK_FOR_INTERRUPTS();