From 695c5977c8bc115029a85dcc1821d7b0136b4e4c Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Mon, 11 Nov 2019 16:33:04 +1300 Subject: [PATCH] Optimize TransactionIdIsCurrentTransactionId(). If the passed in xid is the current top transaction, we can do a fast check and exit early. This should work well for the current heap but also works very well for proposed AMs that don't use a separate xid for subtransactions. Author: Ashwin Agrawal, based on a suggestion from Andres Freund Reviewed-by: Thomas Munro Discussion: https://postgr.es/m/CALfoeiv0k3hkEb3Oqk%3DziWqtyk2Jys1UOK5hwRBNeANT_yX%2Bng%40mail.gmail.com --- src/backend/access/transam/xact.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index fc55fa6d53..e5e2902465 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -871,6 +871,9 @@ TransactionIdIsCurrentTransactionId(TransactionId xid) if (!TransactionIdIsNormal(xid)) return false; + if (TransactionIdEquals(xid, GetTopTransactionIdIfAny())) + return true; + /* * In parallel workers, the XIDs we must consider as current are stored in * ParallelCurrentXids rather than the transaction-state stack. Note that