Attached is a small patch to avoid putting an opaque structure into
the slru.h file and using it in an external function call where
external callers must always specify NULL.
-Kevin
*** a/src/backend/access/transam/clog.c
--- b/src/backend/access/transam/clog.c
***
*** 445,451 BootStrapCLOG(void)
slotno = ZeroCLOGPage(0, false);
/* Make sure it's written out */
! SimpleLruWritePage(ClogCtl, slotno, NULL);
Assert(!ClogCtl->shared->page_dirty[slotno]);
LWLockRelease(CLogControlLock);
--- 445,451
slotno = ZeroCLOGPage(0, false);
/* Make sure it's written out */
! SimpleLruWritePage(ClogCtl, slotno);
Assert(!ClogCtl->shared->page_dirty[slotno]);
LWLockRelease(CLogControlLock);
***
*** 698,704 clog_redo(XLogRecPtr lsn, XLogRecord *record)
LWLockAcquire(CLogControlLock, LW_EXCLUSIVE);
slotno = ZeroCLOGPage(pageno, false);
! SimpleLruWritePage(ClogCtl, slotno, NULL);
Assert(!ClogCtl->shared->page_dirty[slotno]);
LWLockRelease(CLogControlLock);
--- 698,704
LWLockAcquire(CLogControlLock, LW_EXCLUSIVE);
slotno = ZeroCLOGPage(pageno, false);
! SimpleLruWritePage(ClogCtl, slotno);
Assert(!ClogCtl->shared->page_dirty[slotno]);
LWLockRelease(CLogControlLock);
*** a/src/backend/access/transam/multixact.c
--- b/src/backend/access/transam/multixact.c
***
*** 1454,1460 BootStrapMultiXact(void)
slotno = ZeroMultiXactOffsetPage(0, false);
/* Make sure it's written out */
! SimpleLruWritePage(MultiXactOffsetCtl, slotno, NULL);
Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]);
LWLockRelease(MultiXactOffsetControlLock);
--- 1454,1460
slotno = ZeroMultiXactOffsetPage(0, false);
/* Make sure it's written out */
! SimpleLruWritePage(MultiXactOffsetCtl, slotno);
Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]);
LWLockRelease(MultiXactOffsetControlLock);
***
*** 1465,1471 BootStrapMultiXact(void)
slotno = ZeroMultiXactMemberPage(0, false);
/* Make sure it's written out */
! SimpleLruWritePage(MultiXactMemberCtl, slotno, NULL);
Assert(!MultiXactMemberCtl->shared->page_dirty[slotno]);
LWLockRelease(MultiXactMemberControlLock);
--- 1465,1471
slotno = ZeroMultiXactMemberPage(0, false);
/* Make sure it's written out */
! SimpleLruWritePage(MultiXactMemberCtl, slotno);
Assert(!MultiXactMemberCtl->shared->page_dirty[slotno]);
LWLockRelease(MultiXactMemberControlLock);
***
*** 1986,1992 multixact_redo(XLogRecPtr lsn, XLogRecord *record)
LWLockAcquire(MultiXactOffsetControlLock, LW_EXCLUSIVE);
slotno = ZeroMultiXactOffsetPage(pageno, false);
! SimpleLruWritePage(MultiXactOffsetCtl, slotno, NULL);
Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]);
LWLockRelease(MultiXactOffsetControlLock);
--- 1986,1992
LWLockAcquire(MultiXactOffsetControlLock, LW_EXCLUSIVE);
slotno = ZeroMultiXactOffsetPage(pageno, false);
! SimpleLruWritePage(MultiXactOffsetCtl, slotno);
Assert(!MultiXactOffsetCtl->shared->page_dirty[slotno]);
LWLockRelease(MultiXactOffsetControlLock);
***
*** 2001,2007 multixact_redo(XLogRecPtr lsn, XLogRecord *record)
LWLockAcquire(MultiXactMemberControlLock, LW_EXCLUSIVE);
slotno = ZeroMultiXactMemberPage(pageno, false);
! SimpleLruWritePage(MultiXactMemberCtl, slotno, NULL);
Assert(!MultiXactMemberCtl->shared->page_dirty[slotno]);
LWLockRelease(MultiXactMemberControlLock);
--- 2001,2007
LWLockAcquire(MultiXactMemberControlLock, LW_EXCLUSIVE);
slotno = ZeroMultiXactMemberPage(pageno, false);
! SimpleLruWritePage(MultiXactMemberCtl, slotno);
Assert(!MultiXactMemberCtl->shared->page_dirty[slotno]);
LWLockRelease(MultiXactMemberControlLock);
*** a/src/backend/access/transam/slru.c
--- b/src/backend/access/transam/slru.c
***
*** 78,83 typedef struct SlruFlushData
--- 78,85
int segno[MAX_FLUSH_BUFFERS]; /*
their log seg#s */
} SlruFlushData;
+ typedef struct SlruFlushData *SlruFlush;
+
/*
* Macro to mark a buffer slot "most recently used". Note multiple evaluation
* of arguments!
***
*** 123,128 static int slru_errno;
--- 125,131
static void SimpleLruZeroLSNs(SlruCtl ctl, int slotno);
static void SimpleLruWaitIO(SlruCtl ctl,