mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
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
This commit is contained in:
parent
11e7d626ce
commit
4c7b16312e
@ -956,9 +956,11 @@ ExecInsert(ModifyTableContext *context,
|
|||||||
*
|
*
|
||||||
* We loop back here if we find a conflict below, either during
|
* We loop back here if we find a conflict below, either during
|
||||||
* the pre-check, or when we re-check after inserting the tuple
|
* 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:
|
vlock:
|
||||||
|
CHECK_FOR_INTERRUPTS();
|
||||||
specConflict = false;
|
specConflict = false;
|
||||||
if (!ExecCheckIndexConstraints(resultRelInfo, slot, estate,
|
if (!ExecCheckIndexConstraints(resultRelInfo, slot, estate,
|
||||||
&conflictTid, arbiterIndexes))
|
&conflictTid, arbiterIndexes))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user