mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +03:00
Move interrupt checking from ExecProcNode() to executor nodes.
In a followup commit ExecProcNode(), and especially the large switch it contains, will largely be replaced by a function pointer directly to the correct node. The node functions will then get invoked by a thin inline function wrapper. To avoid having to include miscadmin.h in headers - CHECK_FOR_INTERRUPTS() - move the interrupt checks into the individual executor routines. While looking through all executor nodes, I noticed a number of arguably missing interrupt checks, add these too. Author: Andres Freund, Tom Lane Reviewed-By: Tom Lane Discussion: https://postgr.es/m/22833.1490390175@sss.pgh.pa.us
This commit is contained in:
@ -92,6 +92,14 @@ ExecHashJoin(HashJoinState *node)
|
||||
*/
|
||||
for (;;)
|
||||
{
|
||||
/*
|
||||
* It's possible to iterate this loop many times before returning a
|
||||
* tuple, in some pathological cases such as needing to move much of
|
||||
* the current batch to a later batch. So let's check for interrupts
|
||||
* each time through.
|
||||
*/
|
||||
CHECK_FOR_INTERRUPTS();
|
||||
|
||||
switch (node->hj_JoinState)
|
||||
{
|
||||
case HJ_BUILD_HASHTABLE:
|
||||
@ -246,13 +254,6 @@ 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
|
||||
*/
|
||||
|
Reference in New Issue
Block a user