forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork0
Commit961553d
committed
Make XactLockTableWait() and ConditionalXactLockTableWait() interruptable more.
Previously, XactLockTableWait() and ConditionalXactLockTableWait() could entera non-interruptible loop when they successfully acquired a lock on a transactionbut the transaction still appeared to be running. Since this loop continueduntil the transaction completed, it could result in long, uninterruptible waits.Although this scenario is generally unlikely since XactLockTableWait() andConditionalXactLockTableWait() can basically acquire a transaction lockonly when the transaction is not running, it can occur in a hot standby.In such cases, the transaction may still appear active due tothe KnownAssignedXids list, even while no lock on the transaction exists.For example, this situation can happen when creating a logical replicationslot on a standby.The cause of the non-interruptible loop was the absence of CHECK_FOR_INTERRUPTS()within it. This commit adds CHECK_FOR_INTERRUPTS() to the loop in both functions,ensuring they can be interrupted safely.Back-patch to all supported branches.Author: Kevin K Biju <kevinkbiju@gmail.com>Reviewed-by: Fujii Masao <masao.fujii@gmail.com>Discussion:https://postgr.es/m/CAM45KeELdjhS-rGuvN=ZLJ_asvZACucZ9LZWVzH7bGcD12DDwg@mail.gmail.comBackpatch-through: 131 parentc3eda50 commit961553d
1 file changed
+6
-0
lines changedLines changed: 6 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
717 | 717 |
| |
718 | 718 |
| |
719 | 719 |
| |
| 720 | + | |
| 721 | + | |
720 | 722 |
| |
| 723 | + | |
721 | 724 |
| |
722 | 725 |
| |
723 | 726 |
| |
| |||
757 | 760 |
| |
758 | 761 |
| |
759 | 762 |
| |
| 763 | + | |
| 764 | + | |
760 | 765 |
| |
| 766 | + | |
761 | 767 |
| |
762 | 768 |
| |
763 | 769 |
| |
|
0 commit comments
Comments
(0)