From 26deeb2eb31a831024b2fab5217aa95bcf02215a Mon Sep 17 00:00:00 2001
From: Kevin Rocker <me@kevinrocker.com>
Date: Tue, 11 Aug 2026 22:45:12 +0200
Subject: [PATCH v6 2/2] Assert that vacuum_delay_point() is called only when
 interruptible.

A delay point may sleep and is expected to service query cancel, so it
must not be reached where CHECK_FOR_INTERRUPTS() cannot act, e.g. with
an LWLock or buffer content lock held.  Enforce that in assert-enabled
builds, so that a new call site in a locked region trips the buildfarm
rather than silently delaying with interrupts held off.

Per suggestion from Tom Lane.

Author: Kevin Rocker <me@kevinrocker.com>
Author: Neil Chen <carpenter.nail.cz@gmail.com>
Discussion: https://postgr.es/m/492c6247-43d3-477b-8981-fb0c56767b38%40app.fastmail.com
---
 src/backend/commands/vacuum.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 64eed16a160..3cde337a494 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -2463,6 +2463,12 @@ vacuum_delay_point(bool is_analyze)
 {
 	double		msec = 0;
 
+	/*
+	 * A delay point may sleep and must service query cancel, so it cannot be
+	 * reached where CHECK_FOR_INTERRUPTS() would be a no-op.
+	 */
+	Assert(INTERRUPTS_CAN_BE_PROCESSED());
+
 	/* Always check for interrupts */
 	CHECK_FOR_INTERRUPTS();
 
-- 
2.54.0

