]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Do CHECK_FOR_INTERRUPTS inside, not before, scanGetItem.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 26 Aug 2025 15:38:41 +0000 (11:38 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 26 Aug 2025 15:38:41 +0000 (11:38 -0400)
commit25eadfd0fe7b34f5d3a0d574873a871881bf96f9
treeb9419a7ab19bb5689855fbf75f2017337d9445a6
parent412d29fd21665d0c4e473efbc9636bd0c16d12a8
Do CHECK_FOR_INTERRUPTS inside, not before, scanGetItem.

The CHECK_FOR_INTERRUPTS call in gingetbitmap turns out to be
inadequate to prevent a long uninterruptible loop, because
we now know a case where looping occurs within scanGetItem.
While the next patch will fix the bug that caused that, it
seems foolish to assume that no similar patterns are possible.
Let's do the CFI within scanGetItem's retry loop, instead.
This demonstrably allows canceling out of the loop exhibited
in bug #19031.

Bug: #19031
Reported-by: Tim Wood <washwithcare@gmail.com>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/19031-0638148643d25548@postgresql.org
Backpatch-through: 13
src/backend/access/gin/ginget.c