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:
parent
f68d85bf69
commit
3937cadfd4
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue