postgres.git / summary / log / commit / refs

commit    efba7a63ffbe59790b88e3af459dfd81c742b90f
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Thu Aug 04 18:10:06 2022 +0000

    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


src/backend/executor/nodeModifyTable.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index d328856ae5b..1e79d18bf35 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -832,9 +832,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(resultRelInfo, slot, estate, &conflictTid, arbiterIndexes)) [parent: 1a9ac84923b8]