diff options
| author | Melanie Plageman <melanieplageman@gmail.com> | 2025-12-04 18:55:02 -0500 |
|---|---|---|
| committer | Melanie Plageman <melanieplageman@gmail.com> | 2025-12-04 18:55:02 -0500 |
| commit | 904f9f5ea0e00a88e2429682d01f2ec946bf553a (patch) | |
| tree | 0202e58aa04d3abd4e47ae270d48b573cb6ea782 /src | |
| parent | 80f6e2fb4addb03e2e163a380b5e6e1f4b321286 (diff) | |
Suppress spurious Coverity warning in prune freeze logic
Adjust the prune_freeze_setup() parameter types of new_relfrozen_xid and
new_relmin_mxid to prevent misleading Coverity analysis.
heap_page_prune_and_freeze() compared these values against NULL when
passing them to prune_freeze_setup(), causing Coverity to assume they
could be NULL and flag a possible null-pointer dereference later, even
though it occurs inside a directly related conditional.
Reported-by: Coverity
Author: Melanie Plageman <melanieplageman@gmail.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend/access/heap/pruneheap.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 5af84b4c875..ca44225a10e 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -158,8 +158,8 @@ typedef struct /* Local functions */ static void prune_freeze_setup(PruneFreezeParams *params, - TransactionId new_relfrozen_xid, - MultiXactId new_relmin_mxid, + TransactionId *new_relfrozen_xid, + MultiXactId *new_relmin_mxid, const PruneFreezeResult *presult, PruneState *prstate); static void prune_freeze_plan(Oid reloid, Buffer buffer, @@ -325,8 +325,8 @@ heap_page_prune_opt(Relation relation, Buffer buffer) */ static void prune_freeze_setup(PruneFreezeParams *params, - TransactionId new_relfrozen_xid, - MultiXactId new_relmin_mxid, + TransactionId *new_relfrozen_xid, + MultiXactId *new_relmin_mxid, const PruneFreezeResult *presult, PruneState *prstate) { @@ -362,15 +362,15 @@ prune_freeze_setup(PruneFreezeParams *params, prstate->pagefrz.freeze_required = false; if (prstate->attempt_freeze) { - prstate->pagefrz.FreezePageRelfrozenXid = new_relfrozen_xid; - prstate->pagefrz.NoFreezePageRelfrozenXid = new_relfrozen_xid; - prstate->pagefrz.FreezePageRelminMxid = new_relmin_mxid; - prstate->pagefrz.NoFreezePageRelminMxid = new_relmin_mxid; + Assert(new_relfrozen_xid && new_relmin_mxid); + prstate->pagefrz.FreezePageRelfrozenXid = *new_relfrozen_xid; + prstate->pagefrz.NoFreezePageRelfrozenXid = *new_relfrozen_xid; + prstate->pagefrz.FreezePageRelminMxid = *new_relmin_mxid; + prstate->pagefrz.NoFreezePageRelminMxid = *new_relmin_mxid; } else { - Assert(new_relfrozen_xid == InvalidTransactionId && - new_relmin_mxid == InvalidMultiXactId); + Assert(!new_relfrozen_xid && !new_relmin_mxid); prstate->pagefrz.FreezePageRelminMxid = InvalidMultiXactId; prstate->pagefrz.NoFreezePageRelminMxid = InvalidMultiXactId; prstate->pagefrz.FreezePageRelfrozenXid = InvalidTransactionId; @@ -823,12 +823,8 @@ heap_page_prune_and_freeze(PruneFreezeParams *params, /* Initialize prstate */ prune_freeze_setup(params, - new_relfrozen_xid ? - *new_relfrozen_xid : InvalidTransactionId, - new_relmin_mxid ? - *new_relmin_mxid : InvalidMultiXactId, - presult, - &prstate); + new_relfrozen_xid, new_relmin_mxid, + presult, &prstate); /* * Examine all line pointers and tuple visibility information to determine |
