From 0c99d41ec887051fb0cc6e35e358ecc936a13584 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 1 Jun 2011 17:01:59 -0400
Subject: [PATCH] Allow hash joins to be interrupted while searching hash table
 for match.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Per experimentation with a recent example, in which unreasonable amounts
of time could elapse before the backend would respond to a query-cancel.

This might be something to back-patch, but the patch doesn't apply cleanly
because this code was rewritten for 9.1.  Given the lack of field
complaints I won't bother for now.

Cédric Villemain
---
 src/backend/executor/nodeHashjoin.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/backend/executor/nodeHashjoin.c b/src/backend/executor/nodeHashjoin.c
index 26da3b2fdf5..0e7ca625cee 100644
--- a/src/backend/executor/nodeHashjoin.c
+++ b/src/backend/executor/nodeHashjoin.c
@@ -19,6 +19,7 @@
 #include "executor/hashjoin.h"
 #include "executor/nodeHash.h"
 #include "executor/nodeHashjoin.h"
+#include "miscadmin.h"
 #include "utils/memutils.h"
 
 
@@ -262,6 +263,13 @@ ExecHashJoin(HashJoinState *node)
 
 			case HJ_SCAN_BUCKET:
 
+				/*
+				 * We check for interrupts here because this corresponds to
+				 * where we'd fetch a row from a child plan node in other
+				 * join types.
+				 */
+				CHECK_FOR_INTERRUPTS();
+
 				/*
 				 * Scan the selected hash bucket for matches to current outer
 				 */
-- 
GitLab