diff --git a/src/backend/executor/nodeHash.c b/src/backend/executor/nodeHash.c index b10a58b4248..f86b84ef520 100644 --- a/src/backend/executor/nodeHash.c +++ b/src/backend/executor/nodeHash.c @@ -666,6 +666,9 @@ ExecHashIncreaseNumBatches(HashJoinTable hashtable) } tuple = nexttuple; + + /* allow this loop to be cancellable */ + CHECK_FOR_INTERRUPTS(); } } @@ -1437,6 +1440,9 @@ ExecHashRemoveNextSkewBucket(HashJoinTable hashtable) } hashTuple = nextHashTuple; + + /* allow this loop to be cancellable */ + CHECK_FOR_INTERRUPTS(); } /* diff --git a/src/backend/executor/nodeHashjoin.c b/src/backend/executor/nodeHashjoin.c index fbdda9c8ee1..34e9f59efad 100644 --- a/src/backend/executor/nodeHashjoin.c +++ b/src/backend/executor/nodeHashjoin.c @@ -910,6 +910,13 @@ ExecHashJoinGetSavedTuple(HashJoinState *hjstate, size_t nread; MinimalTuple tuple; + /* + * We check for interrupts here because this is typically taken as an + * alternative code path to an ExecProcNode() call, which would include + * such a check. + */ + CHECK_FOR_INTERRUPTS(); + /* * Since both the hash value and the MinimalTuple length word are uint32, * we can read them both in one BufFileRead() call without any type