Content-Length: 273617 | pFad | http://github.com/postgres/postgres/commit/405cca9daa422913a83b3b7678f12e745d9c94a6

C0 Make XactLockTableWait() and ConditionalXactLockTableWait() interrupt… · postgres/postgres@405cca9 · GitHub
Skip to content

Commit 405cca9

Browse files
committed
Make XactLockTableWait() and ConditionalXactLockTableWait() interruptable more.
Previously, XactLockTableWait() and ConditionalXactLockTableWait() could enter a non-interruptible loop when they successfully acquired a lock on a transaction but the transaction still appeared to be running. Since this loop continued until the transaction completed, it could result in long, uninterruptible waits. Although this scenario is generally unlikely since XactLockTableWait() and ConditionalXactLockTableWait() can basically acquire a transaction lock only when the transaction is not running, it can occur in a hot standby. In such cases, the transaction may still appear active due to the KnownAssignedXids list, even while no lock on the transaction exists. For example, this situation can happen when creating a logical replication slot 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.com Backpatch-through: 13
1 parent 4620cd9 commit 405cca9

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
@@ -716,7 +716,10 @@ XactLockTableWait(TransactionId xid, Relation rel, ItemPointer ctid,
716716
* through, to avoid slowing down the normal case.)
717717
*/
718718
if (!first)
719+
{
720+
CHECK_FOR_INTERRUPTS();
719721
pg_usleep(1000L);
722+
}
720723
first = false;
721724
xid = SubTransGetTopmostTransaction(xid);
722725
}
@@ -754,7 +757,10 @@ ConditionalXactLockTableWait(TransactionId xid)
754757

755758
/* See XactLockTableWait about this case */
756759
if (!first)
760+
{
761+
CHECK_FOR_INTERRUPTS();
757762
pg_usleep(1000L);
763+
}
758764
first = false;
759765
xid = SubTransGetTopmostTransaction(xid);
760766
}

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/postgres/postgres/commit/405cca9daa422913a83b3b7678f12e745d9c94a6

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy