aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeModifyTable.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2022-08-04 14:10:06 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2022-08-04 14:10:06 -0400
commit23edf0e8b4d1677f8e5269fb15a584155c2e08e2 (patch)
tree5064e447d7759fcc36557239187adc3bf06659f6 /src/backend/executor/nodeModifyTable.c
parent8d38ccafca9382d79eee4badfa11b1114475622d (diff)
downloadpostgresql-23edf0e8b4d1677f8e5269fb15a584155c2e08e2.tar.gz
postgresql-23edf0e8b4d1677f8e5269fb15a584155c2e08e2.zip
Add CHECK_FOR_INTERRUPTS in ExecInsert's speculative insertion loop.
Ordinarily the functions called in this loop ought to have plenty of CFIs themselves; but we've now seen a case where no such CFI is reached, making the loop uninterruptible. Even though that's from a recently-introduced bug, it seems prudent to install a CFI at the loop level in all branches. Per discussion of bug #17558 from Andrew Kesper (an actual fix for that bug will follow). Discussion: https://postgr.es/m/17558-3f6599ffcf52fd4a@postgresql.org
Diffstat (limited to 'src/backend/executor/nodeModifyTable.c')
-rw-r--r--src/backend/executor/nodeModifyTable.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c
index c5d1c924322..367155634d6 100644
--- a/src/backend/executor/nodeModifyTable.c
+++ b/src/backend/executor/nodeModifyTable.c
@@ -541,9 +541,11 @@ ExecInsert(ModifyTableState *mtstate,
*
* We loop back here if we find a conflict below, either during
* the pre-check, or when we re-check after inserting the tuple
- * speculatively.
+ * speculatively. Better allow interrupts in case some bug makes
+ * this an infinite loop.
*/
vlock:
+ CHECK_FOR_INTERRUPTS();
specConflict = false;
if (!ExecCheckIndexConstraints(slot, estate, &conflictTid,
arbiterIndexes))