Skip to content

Commit ed962fd

Browse files
committed
Ensure that seqscans check for interrupts at least once per page.
If a seqscan encounters many consecutive pages containing only dead tuples, it can remain in the loop in heapgettup for a long time, and there was no CHECK_FOR_INTERRUPTS anywhere in that loop. This meant there were real-world situations where a query would be effectively uncancelable for long stretches. Add a check placed to occur once per page, which should be enough to provide reasonable response time without adding any measurable overhead. Report and patch by Merlin Moncure (though I tweaked it a bit). Back-patch to all supported branches.
1 parent 92a953f commit ed962fd

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/backend/access/heap/heapam.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,13 @@ heapgetpage(HeapScanDesc scan, BlockNumber page)
222222
scan->rs_cbuf = InvalidBuffer;
223223
}
224224

225+
/*
226+
* Be sure to check for interrupts at least once per page. Checks at
227+
* higher code levels won't be able to stop a seqscan that encounters
228+
* many pages' worth of consecutive dead tuples.
229+
*/
230+
CHECK_FOR_INTERRUPTS();
231+
225232
/* read page using selected strategy */
226233
scan->rs_cbuf = ReadBufferExtended(scan->rs_rd, MAIN_FORKNUM, page,
227234
RBM_NORMAL, scan->rs_strategy);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy