Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit961553d

Browse files
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: 13
1 parentc3eda50 commit961553d

File tree

1 file changed

+6
-0
lines changed
  • src/backend/storage/lmgr

1 file changed

+6
-0
lines changed

‎src/backend/storage/lmgr/lmgr.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,7 +717,10 @@ XactLockTableWait(TransactionId xid, Relation rel, ItemPointer ctid,
717717
* through, to avoid slowing down the normal case.)
718718
*/
719719
if (!first)
720+
{
721+
CHECK_FOR_INTERRUPTS();
720722
pg_usleep(1000L);
723+
}
721724
first= false;
722725
xid=SubTransGetTopmostTransaction(xid);
723726
}
@@ -757,7 +760,10 @@ ConditionalXactLockTableWait(TransactionId xid, bool logLockFailure)
757760

758761
/* See XactLockTableWait about this case */
759762
if (!first)
763+
{
764+
CHECK_FOR_INTERRUPTS();
760765
pg_usleep(1000L);
766+
}
761767
first= false;
762768
xid=SubTransGetTopmostTransaction(xid);
763769
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp