From bd4ae0f396b36955c92f26c0058e7dc0452db817 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 12 Nov 2014 18:52:49 +0100
Subject: [PATCH] Add interrupt checks to contrib/pg_prewarm.

Currently the extension's pg_prewarm() function didn't check
interrupts once it started "warming" data. Since individual calls can
take a long while it's important for them to be interruptible.

Backpatch to 9.4 where pg_prewarm was introduced.
---
 contrib/pg_prewarm/pg_prewarm.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/contrib/pg_prewarm/pg_prewarm.c b/contrib/pg_prewarm/pg_prewarm.c
index df20e888eff..32c724e5ce2 100644
--- a/contrib/pg_prewarm/pg_prewarm.c
+++ b/contrib/pg_prewarm/pg_prewarm.c
@@ -159,6 +159,7 @@ pg_prewarm(PG_FUNCTION_ARGS)
 		 */
 		for (block = first_block; block <= last_block; ++block)
 		{
+			CHECK_FOR_INTERRUPTS();
 			PrefetchBuffer(rel, forkNumber, block);
 			++blocks_done;
 		}
@@ -177,6 +178,7 @@ pg_prewarm(PG_FUNCTION_ARGS)
 		 */
 		for (block = first_block; block <= last_block; ++block)
 		{
+			CHECK_FOR_INTERRUPTS();
 			smgrread(rel->rd_smgr, forkNumber, block, blockbuffer);
 			++blocks_done;
 		}
@@ -190,6 +192,7 @@ pg_prewarm(PG_FUNCTION_ARGS)
 		{
 			Buffer		buf;
 
+			CHECK_FOR_INTERRUPTS();
 			buf = ReadBufferExtended(rel, forkNumber, block, RBM_NORMAL, NULL);
 			ReleaseBuffer(buf);
 			++blocks_done;
-- 
GitLab