]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Replace literal 0 with InvalidXLogRecPtr for XLogRecPtr assignments
authorÁlvaro Herrera <alvherre@kurilemu.de>
Thu, 29 Jan 2026 17:37:09 +0000 (18:37 +0100)
committerÁlvaro Herrera <alvherre@kurilemu.de>
Thu, 29 Jan 2026 17:37:09 +0000 (18:37 +0100)
Use the proper constant InvalidXLogRecPtr instead of literal 0 when
assigning XLogRecPtr variables and struct fields.

This improves code clarity by making it explicit that these are
invalid LSN values rather than ambiguous zero literals.

Author: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Discussion: https://postgr.es/m/aRtd2dw8FO1nNX7k@ip-10-97-1-34.eu-west-3.compute.internal

src/backend/access/gist/gist.c
src/backend/access/transam/parallel.c
src/backend/access/transam/xlog.c
src/backend/access/transam/xlogprefetcher.c
src/backend/access/transam/xlogrecovery.c
src/backend/replication/syncrep.c
src/backend/replication/walreceiver.c
src/backend/storage/lmgr/proc.c
src/bin/pg_resetwal/pg_resetwal.c
src/bin/pg_rewind/pg_rewind.c

index d5944205db25e2df0cb5fa9ab1c2fbfe7c4e3839..dfffce3e39660cf4c3e48633c9a4558c2219e585 100644 (file)
@@ -291,7 +291,7 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate,
                SplitPageLayout *dist = NULL,
                                   *ptr;
                BlockNumber oldrlink = InvalidBlockNumber;
-               GistNSN         oldnsn = 0;
+               GistNSN         oldnsn = InvalidXLogRecPtr;
                SplitPageLayout rootpg;
                bool            is_rootsplit;
                int                     npage;
@@ -654,7 +654,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace,
 
        /* Start from the root */
        firststack.blkno = GIST_ROOT_BLKNO;
-       firststack.lsn = 0;
+       firststack.lsn = InvalidXLogRecPtr;
        firststack.retry_from_parent = false;
        firststack.parent = NULL;
        firststack.downlinkoffnum = InvalidOffsetNumber;
index 01a89104ef07d5af7e8074a08784b6d5987aeb2b..fe00488487db2684710f0ef513526eac6a9343a9 100644 (file)
@@ -357,7 +357,7 @@ InitializeParallelDSM(ParallelContext *pcxt)
        fps->stmt_ts = GetCurrentStatementStartTimestamp();
        fps->serializable_xact_handle = ShareSerializableXact();
        SpinLockInit(&fps->mutex);
-       fps->last_xlog_end = 0;
+       fps->last_xlog_end = InvalidXLogRecPtr;
        shm_toc_insert(pcxt->toc, PARALLEL_KEY_FIXED, fps);
 
        /* We can skip the rest of this if we're not budgeting for any workers. */
@@ -530,7 +530,7 @@ ReinitializeParallelDSM(ParallelContext *pcxt)
 
        /* Reset a few bits of fixed parallel state to a clean state. */
        fps = shm_toc_lookup(pcxt->toc, PARALLEL_KEY_FIXED, false);
-       fps->last_xlog_end = 0;
+       fps->last_xlog_end = InvalidXLogRecPtr;
 
        /* Recreate error queues (if they exist). */
        if (pcxt->nworkers > 0)
index 16614e152dd337561bed80a4a29e561af7c8d5f1..13ec6225b859f9c04fd8c6152f200441b1136b88 100644 (file)
@@ -2060,7 +2060,7 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, TimeLineID tli, bool opportunistic)
                                        /* Have to write it ourselves */
                                        TRACE_POSTGRESQL_WAL_BUFFER_WRITE_DIRTY_START();
                                        WriteRqst.Write = OldPageRqstPtr;
-                                       WriteRqst.Flush = 0;
+                                       WriteRqst.Flush = InvalidXLogRecPtr;
                                        XLogWrite(WriteRqst, tli, false);
                                        LWLockRelease(WALWriteLock);
                                        pgWalUsage.wal_buffers_full++;
@@ -3077,7 +3077,7 @@ XLogBackgroundFlush(void)
        else
        {
                /* no flushing, this time round */
-               WriteRqst.Flush = 0;
+               WriteRqst.Flush = InvalidXLogRecPtr;
        }
 
 #ifdef WAL_DEBUG
@@ -5207,7 +5207,7 @@ BootStrapXLOG(uint32 data_checksum_version)
        /* Insert the initial checkpoint record */
        recptr = ((char *) page + SizeOfXLogLongPHD);
        record = (XLogRecord *) recptr;
-       record->xl_prev = 0;
+       record->xl_prev = InvalidXLogRecPtr;
        record->xl_xid = InvalidTransactionId;
        record->xl_tot_len = SizeOfXLogRecord + SizeOfXLogRecordDataHeaderShort + sizeof(checkPoint);
        record->xl_info = XLOG_CHECKPOINT_SHUTDOWN;
index 3c3f067aafbcb408e8750de7b8ceb6c19fb8425d..24cfa96d737a289be1a9c997ef17f2d59e709b94 100644 (file)
@@ -967,7 +967,7 @@ XLogPrefetcherBeginRead(XLogPrefetcher *prefetcher, XLogRecPtr recPtr)
        /* Book-keeping to avoid readahead on first read. */
        prefetcher->begin_ptr = recPtr;
 
-       prefetcher->no_readahead_until = 0;
+       prefetcher->no_readahead_until = InvalidXLogRecPtr;
 
        /* This will forget about any queued up records in the decoder. */
        XLogBeginRead(prefetcher->reader, recPtr);
index a81dcbb5d79b02b4f22624692e6b4891b94c0391..4fc37a031d9a1c7c2a8b2b34869c1d2174e995c4 100644 (file)
@@ -261,7 +261,7 @@ static TimestampTz XLogReceiptTime = 0;
 static XLogSource XLogReceiptSource = XLOG_FROM_ANY;
 
 /* Local copy of WalRcv->flushedUpto */
-static XLogRecPtr flushedUpto = 0;
+static XLogRecPtr flushedUpto = InvalidXLogRecPtr;
 static TimeLineID receiveTLI = 0;
 
 /*
@@ -3918,7 +3918,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
                                                RequestXLogStreaming(tli, ptr, PrimaryConnInfo,
                                                                                         PrimarySlotName,
                                                                                         wal_receiver_create_temp_slot);
-                                               flushedUpto = 0;
+                                               flushedUpto = InvalidXLogRecPtr;
                                        }
 
                                        /*
@@ -4096,7 +4096,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
 static int
 emode_for_corrupt_record(int emode, XLogRecPtr RecPtr)
 {
-       static XLogRecPtr lastComplaint = 0;
+       static XLogRecPtr lastComplaint = InvalidXLogRecPtr;
 
        if (readSource == XLOG_FROM_PG_WAL && emode == LOG)
        {
index e7bee777532aefead1efd937559e2cf7cebdf46d..7ea6001e9ade2826dc4dedc9b2cfc703bdc91f4a 100644 (file)
@@ -355,7 +355,7 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit)
        pg_read_barrier();
        Assert(dlist_node_is_detached(&MyProc->syncRepLinks));
        MyProc->syncRepState = SYNC_REP_NOT_WAITING;
-       MyProc->waitLSN = 0;
+       MyProc->waitLSN = InvalidXLogRecPtr;
 
        /* reset ps display to remove the suffix */
        if (update_process_title)
@@ -1027,7 +1027,7 @@ SyncRepQueueIsOrderedByLSN(int mode)
 
        Assert(mode >= 0 && mode < NUM_SYNC_REP_WAIT_MODE);
 
-       lastLSN = 0;
+       lastLSN = InvalidXLogRecPtr;
 
        dlist_foreach(iter, &WalSndCtl->SyncRepQueue[mode])
        {
index 6970af3f3ffcdb202d855005f10b2ea361693fbf..8b99160ed0e81e3572ae39462caa9d766499d959 100644 (file)
@@ -1122,8 +1122,8 @@ XLogWalRcvClose(XLogRecPtr recptr, TimeLineID tli)
 static void
 XLogWalRcvSendReply(bool force, bool requestReply)
 {
-       static XLogRecPtr writePtr = 0;
-       static XLogRecPtr flushPtr = 0;
+       static XLogRecPtr writePtr = InvalidXLogRecPtr;
+       static XLogRecPtr flushPtr = InvalidXLogRecPtr;
        XLogRecPtr      applyPtr;
        TimestampTz now;
 
index 063826ae57635765531a19600ed449eaedfed036..696bbb7b9114004850f07ab4d8a899c47ad19463 100644 (file)
@@ -509,7 +509,7 @@ InitProcess(void)
        MyProc->recoveryConflictPending = false;
 
        /* Initialize fields for sync rep */
-       MyProc->waitLSN = 0;
+       MyProc->waitLSN = InvalidXLogRecPtr;
        MyProc->syncRepState = SYNC_REP_NOT_WAITING;
        dlist_node_init(&MyProc->syncRepLinks);
 
index b2c4b9db395acbd078f2ecdbe822926c17f8a95e..431b83a67da87202b526f6dd4bd53ded33ed4764 100644 (file)
@@ -913,10 +913,10 @@ RewriteControlFile(void)
 
        ControlFile.state = DB_SHUTDOWNED;
        ControlFile.checkPoint = ControlFile.checkPointCopy.redo;
-       ControlFile.minRecoveryPoint = 0;
+       ControlFile.minRecoveryPoint = InvalidXLogRecPtr;
        ControlFile.minRecoveryPointTLI = 0;
-       ControlFile.backupStartPoint = 0;
-       ControlFile.backupEndPoint = 0;
+       ControlFile.backupStartPoint = InvalidXLogRecPtr;
+       ControlFile.backupEndPoint = InvalidXLogRecPtr;
        ControlFile.backupEndRequired = false;
 
        /*
@@ -1147,7 +1147,7 @@ WriteEmptyXLOG(void)
        /* Insert the initial checkpoint record */
        recptr = (char *) page + SizeOfXLogLongPHD;
        record = (XLogRecord *) recptr;
-       record->xl_prev = 0;
+       record->xl_prev = InvalidXLogRecPtr;
        record->xl_xid = InvalidTransactionId;
        record->xl_tot_len = SizeOfXLogRecord + SizeOfXLogRecordDataHeaderShort + sizeof(CheckPoint);
        record->xl_info = XLOG_CHECKPOINT_SHUTDOWN;
index 31693843b3cccb393838b1578c01e1afede81335..d0aafd7e7a6531e4a9bcced38f88e360c201a1e5 100644 (file)
@@ -377,7 +377,7 @@ main(int argc, char **argv)
        {
                pg_log_info("source and target cluster are on the same timeline");
                rewind_needed = false;
-               target_wal_endrec = 0;
+               target_wal_endrec = InvalidXLogRecPtr;
        }
        else
        {