1
0
mirror of https://github.com/postgres/postgres.git synced 2025-12-19 17:02:53 +03:00

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>
This commit is contained in:
Melanie Plageman
2025-12-04 18:55:02 -05:00
parent 80f6e2fb4a
commit 904f9f5ea0

View File

@@ -158,8 +158,8 @@ typedef struct
/* Local functions */ /* Local functions */
static void prune_freeze_setup(PruneFreezeParams *params, static void prune_freeze_setup(PruneFreezeParams *params,
TransactionId new_relfrozen_xid, TransactionId *new_relfrozen_xid,
MultiXactId new_relmin_mxid, MultiXactId *new_relmin_mxid,
const PruneFreezeResult *presult, const PruneFreezeResult *presult,
PruneState *prstate); PruneState *prstate);
static void prune_freeze_plan(Oid reloid, Buffer buffer, static void prune_freeze_plan(Oid reloid, Buffer buffer,
@@ -325,8 +325,8 @@ heap_page_prune_opt(Relation relation, Buffer buffer)
*/ */
static void static void
prune_freeze_setup(PruneFreezeParams *params, prune_freeze_setup(PruneFreezeParams *params,
TransactionId new_relfrozen_xid, TransactionId *new_relfrozen_xid,
MultiXactId new_relmin_mxid, MultiXactId *new_relmin_mxid,
const PruneFreezeResult *presult, const PruneFreezeResult *presult,
PruneState *prstate) PruneState *prstate)
{ {
@@ -362,15 +362,15 @@ prune_freeze_setup(PruneFreezeParams *params,
prstate->pagefrz.freeze_required = false; prstate->pagefrz.freeze_required = false;
if (prstate->attempt_freeze) if (prstate->attempt_freeze)
{ {
prstate->pagefrz.FreezePageRelfrozenXid = new_relfrozen_xid; Assert(new_relfrozen_xid && new_relmin_mxid);
prstate->pagefrz.NoFreezePageRelfrozenXid = new_relfrozen_xid; prstate->pagefrz.FreezePageRelfrozenXid = *new_relfrozen_xid;
prstate->pagefrz.FreezePageRelminMxid = new_relmin_mxid; prstate->pagefrz.NoFreezePageRelfrozenXid = *new_relfrozen_xid;
prstate->pagefrz.NoFreezePageRelminMxid = new_relmin_mxid; prstate->pagefrz.FreezePageRelminMxid = *new_relmin_mxid;
prstate->pagefrz.NoFreezePageRelminMxid = *new_relmin_mxid;
} }
else else
{ {
Assert(new_relfrozen_xid == InvalidTransactionId && Assert(!new_relfrozen_xid && !new_relmin_mxid);
new_relmin_mxid == InvalidMultiXactId);
prstate->pagefrz.FreezePageRelminMxid = InvalidMultiXactId; prstate->pagefrz.FreezePageRelminMxid = InvalidMultiXactId;
prstate->pagefrz.NoFreezePageRelminMxid = InvalidMultiXactId; prstate->pagefrz.NoFreezePageRelminMxid = InvalidMultiXactId;
prstate->pagefrz.FreezePageRelfrozenXid = InvalidTransactionId; prstate->pagefrz.FreezePageRelfrozenXid = InvalidTransactionId;
@@ -823,12 +823,8 @@ heap_page_prune_and_freeze(PruneFreezeParams *params,
/* Initialize prstate */ /* Initialize prstate */
prune_freeze_setup(params, prune_freeze_setup(params,
new_relfrozen_xid ? new_relfrozen_xid, new_relmin_mxid,
*new_relfrozen_xid : InvalidTransactionId, presult, &prstate);
new_relmin_mxid ?
*new_relmin_mxid : InvalidMultiXactId,
presult,
&prstate);
/* /*
* Examine all line pointers and tuple visibility information to determine * Examine all line pointers and tuple visibility information to determine