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();
 
