From 358dda1591ca96bf8c6b9dbdc463148461d2709b Mon Sep 17 00:00:00 2001 From: reshke Date: Fri, 19 Dec 2025 21:23:38 +0000 Subject: [PATCH v1] Unity NULL snapshot hadling. UnregisterSnapshot and UnregisterSnapshotFromOwner are ready to accept NULL snapshot. However, there are places in code where we call this function only for non-NULL argumnet. Remove this unneccessary check to simplify coding. --- contrib/amcheck/verify_nbtree.c | 7 ++++--- src/backend/access/index/genam.c | 9 +++++---- src/backend/access/index/indexam.c | 4 ++-- src/backend/libpq/be-fsstubs.c | 4 ++-- src/backend/utils/cache/relcache.c | 4 ++-- src/backend/utils/mmgr/portalmem.c | 8 ++++---- src/backend/utils/time/snapmgr.c | 4 ++-- 7 files changed, 21 insertions(+), 19 deletions(-) diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index f91392a3a49..40a2dc8d69b 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -594,9 +594,10 @@ bt_check_every_level(Relation rel, Relation heaprel, bool heapkeyspace, bloom_free(state->filter); } - /* Be tidy: */ - if (state->snapshot != InvalidSnapshot) - UnregisterSnapshot(state->snapshot); + /* Be tidy. Dont worry about snapshot being NULL here, + * as UnregisterSnapshot is ready to handle it. */ + UnregisterSnapshot(state->snapshot); + MemoryContextDelete(state->targetcontext); } diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index b7f10a1aed0..59607e2a160 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -616,8 +616,8 @@ systable_endscan(SysScanDesc sysscan) else table_endscan(sysscan->scan); - if (sysscan->snapshot) - UnregisterSnapshot(sysscan->snapshot); + /* Be tidy, unregister snaphot, if any. */ + UnregisterSnapshot(sysscan->snapshot); /* * Reset the bsysscan flag at the end of the systable scan. See detailed @@ -764,8 +764,9 @@ systable_endscan_ordered(SysScanDesc sysscan) Assert(sysscan->irel); index_endscan(sysscan->iscan); - if (sysscan->snapshot) - UnregisterSnapshot(sysscan->snapshot); + + /* Be tidy, unregister snaphot, if any. */ + UnregisterSnapshot(sysscan->snapshot); /* * Reset the bsysscan flag at the end of the systable scan. See detailed diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c index 0492d92d23b..6727bcf8565 100644 --- a/src/backend/access/index/indexam.c +++ b/src/backend/access/index/indexam.c @@ -407,8 +407,8 @@ index_endscan(IndexScanDesc scan) /* Release index refcount acquired by index_beginscan */ RelationDecrementReferenceCount(scan->indexRelation); - if (scan->xs_temp_snap) - UnregisterSnapshot(scan->xs_snapshot); + /* Be tidy, unregister snaphot, if any. */ + UnregisterSnapshot(scan->xs_snapshot); /* Release the scan data structure itself */ IndexScanEnd(scan); diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c index e5a34c61931..3015683f51e 100644 --- a/src/backend/libpq/be-fsstubs.c +++ b/src/backend/libpq/be-fsstubs.c @@ -729,8 +729,8 @@ closeLOfd(int fd) lobj = cookies[fd]; cookies[fd] = NULL; - if (lobj->snapshot) - UnregisterSnapshotFromOwner(lobj->snapshot, + /* Be tidy, unregister snaphot, if any. */ + UnregisterSnapshotFromOwner(lobj->snapshot, TopTransactionResourceOwner); inv_close(lobj); } diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 2d0cb7bcfd4..ef3707488b4 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -395,8 +395,8 @@ ScanPgRelation(Oid targetRelId, bool indexOK, bool force_non_historic) /* all done */ systable_endscan(pg_class_scan); - if (snapshot) - UnregisterSnapshot(snapshot); + /* Be tidy, unregister snaphot, if any. */ + UnregisterSnapshot(snapshot); table_close(pg_class_desc, AccessShareLock); diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c index 1f2a423f38a..5d4c565b4af 100644 --- a/src/backend/utils/mmgr/portalmem.c +++ b/src/backend/utils/mmgr/portalmem.c @@ -525,8 +525,8 @@ PortalDrop(Portal portal, bool isTopCommit) */ if (portal->holdSnapshot) { - if (portal->resowner) - UnregisterSnapshotFromOwner(portal->holdSnapshot, + /* Be tidy, unregister snaphot, if any. */ + UnregisterSnapshotFromOwner(portal->holdSnapshot, portal->resowner); portal->holdSnapshot = NULL; } @@ -708,8 +708,8 @@ PreCommit_Portals(bool isPrepare) { if (portal->holdSnapshot) { - if (portal->resowner) - UnregisterSnapshotFromOwner(portal->holdSnapshot, + /* Be tidy, unregister snaphot, if any. */ + UnregisterSnapshotFromOwner(portal->holdSnapshot, portal->resowner); portal->holdSnapshot = NULL; } diff --git a/src/backend/utils/time/snapmgr.c b/src/backend/utils/time/snapmgr.c index 5af8326d5e8..1350b21efa7 100644 --- a/src/backend/utils/time/snapmgr.c +++ b/src/backend/utils/time/snapmgr.c @@ -865,7 +865,7 @@ RegisterSnapshotOnOwner(Snapshot snapshot, ResourceOwner owner) void UnregisterSnapshot(Snapshot snapshot) { - if (snapshot == NULL) + if (snapshot == InvalidSnapshot) return; UnregisterSnapshotFromOwner(snapshot, CurrentResourceOwner); @@ -878,7 +878,7 @@ UnregisterSnapshot(Snapshot snapshot) void UnregisterSnapshotFromOwner(Snapshot snapshot, ResourceOwner owner) { - if (snapshot == NULL) + if (snapshot == InvalidSnapshot) return; ResourceOwnerForgetSnapshot(owner, snapshot); -- 2.43.0