Use more consistently int64 for page numbers in SLRU-related code

clog.c, async.c and predicate.c included some SLRU page numbers still
handled as 4-byte integers, while int64 should be used for this purpose.

These holes have been introduced in 4ed8f0913b, that has introduced
the use of 8-byte integers for SLRU page numbers, still forgot about the
code paths updated by this commit.

Reported-by: Noah Misch
Author: Aleksander Alekseev, Michael Paquier
Discussion: https://postgr.es/m/20240626002747.dc.nmisch@google.com
Backpatch-through: 17
This commit is contained in:
Michael Paquier 2024-07-23 17:59:05 +09:00
parent f68d85bf69
commit 3937cadfd4
3 changed files with 16 additions and 16 deletions

View File

@ -445,7 +445,7 @@ TransactionGroupUpdateXidStatus(TransactionId xid, XidStatus status,
PGPROC *proc = MyProc;
uint32 nextidx;
uint32 wakeidx;
int prevpageno;
int64 prevpageno;
LWLock *prevlock = NULL;
/* We should definitely have an XID whose status needs to be updated. */
@ -577,7 +577,7 @@ TransactionGroupUpdateXidStatus(TransactionId xid, XidStatus status,
while (nextidx != INVALID_PROC_NUMBER)
{
PGPROC *nextproc = &ProcGlobal->allProcs[nextidx];
int thispageno = nextproc->clogGroupMemberPage;
int64 thispageno = nextproc->clogGroupMemberPage;
/*
* If the page to update belongs to a different bank than the previous

View File

@ -283,7 +283,7 @@ typedef struct AsyncQueueControl
QueuePosition head; /* head points to the next free location */
QueuePosition tail; /* tail must be <= the queue position of every
* listening backend */
int stopPage; /* oldest unrecycled page; must be <=
int64 stopPage; /* oldest unrecycled page; must be <=
* tail.page */
ProcNumber firstListener; /* id of first listener, or
* INVALID_PROC_NUMBER */
@ -1271,9 +1271,9 @@ asyncQueueUnregister(void)
static bool
asyncQueueIsFull(void)
{
int headPage = QUEUE_POS_PAGE(QUEUE_HEAD);
int tailPage = QUEUE_POS_PAGE(QUEUE_TAIL);
int occupied = headPage - tailPage;
int64 headPage = QUEUE_POS_PAGE(QUEUE_HEAD);
int64 tailPage = QUEUE_POS_PAGE(QUEUE_TAIL);
int64 occupied = headPage - tailPage;
return occupied >= max_notify_queue_pages;
}
@ -1505,9 +1505,9 @@ pg_notification_queue_usage(PG_FUNCTION_ARGS)
static double
asyncQueueUsage(void)
{
int headPage = QUEUE_POS_PAGE(QUEUE_HEAD);
int tailPage = QUEUE_POS_PAGE(QUEUE_TAIL);
int occupied = headPage - tailPage;
int64 headPage = QUEUE_POS_PAGE(QUEUE_HEAD);
int64 tailPage = QUEUE_POS_PAGE(QUEUE_TAIL);
int64 occupied = headPage - tailPage;
if (occupied == 0)
return (double) 0; /* fast exit for common case */
@ -1932,7 +1932,7 @@ asyncQueueReadAllNotifications(void)
do
{
int curpage = QUEUE_POS_PAGE(pos);
int64 curpage = QUEUE_POS_PAGE(pos);
int curoffset = QUEUE_POS_OFFSET(pos);
int slotno;
int copysize;
@ -2108,9 +2108,9 @@ static void
asyncQueueAdvanceTail(void)
{
QueuePosition min;
int oldtailpage;
int newtailpage;
int boundary;
int64 oldtailpage;
int64 newtailpage;
int64 boundary;
/* Restrict task to one backend per cluster; see SimpleLruTruncate(). */
LWLockAcquire(NotifyQueueTailLock, LW_EXCLUSIVE);

View File

@ -344,7 +344,7 @@ static SlruCtlData SerialSlruCtlData;
typedef struct SerialControlData
{
int headPage; /* newest initialized page */
int64 headPage; /* newest initialized page */
TransactionId headXid; /* newest valid Xid in the SLRU */
TransactionId tailXid; /* oldest xmin we might be interested in */
} SerialControlData;
@ -1035,7 +1035,7 @@ SerialSetActiveSerXmin(TransactionId xid)
void
CheckPointPredicate(void)
{
int truncateCutoffPage;
int64 truncateCutoffPage;
LWLockAcquire(SerialControlLock, LW_EXCLUSIVE);
@ -1048,7 +1048,7 @@ CheckPointPredicate(void)
if (TransactionIdIsValid(serialControl->tailXid))
{
int tailPage;
int64 tailPage;
tailPage = SerialPage(serialControl->tailXid);