aboutsummaryrefslogtreecommitdiff
path: root/src/backend/storage/ipc/sinval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/storage/ipc/sinval.c')
-rw-r--r--src/backend/storage/ipc/sinval.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/backend/storage/ipc/sinval.c b/src/backend/storage/ipc/sinval.c
index 62023afa01c..c610147fc5f 100644
--- a/src/backend/storage/ipc/sinval.c
+++ b/src/backend/storage/ipc/sinval.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinval.c,v 1.21 2000/04/12 17:15:37 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinval.c,v 1.22 2000/11/05 22:50:20 vadim Exp $
*
*-------------------------------------------------------------------------
*/
@@ -369,3 +369,40 @@ GetSnapshotData(bool serializable)
snapshot->xcnt = count;
return snapshot;
}
+
+/*
+ * GetUndoRecPtr -- returns oldest PROC->logRec.
+ */
+XLogRecPtr GetUndoRecPtr(void);
+
+XLogRecPtr
+GetUndoRecPtr(void)
+{
+ SISeg *segP = shmInvalBuffer;
+ ProcState *stateP = segP->procState;
+ XLogRecPtr urec = {0, 0};
+ XLogRecPtr tempr;
+ int index;
+
+ SpinAcquire(SInvalLock);
+
+ for (index = 0; index < segP->maxBackends; index++)
+ {
+ SHMEM_OFFSET pOffset = stateP[index].procStruct;
+
+ if (pOffset != INVALID_OFFSET)
+ {
+ PROC *proc = (PROC *) MAKE_PTR(pOffset);
+ tempr = proc->logRec;
+ if (tempr.xrecoff == 0)
+ continue;
+ if (urec.xrecoff != 0 && XLByteLT(urec, tempr))
+ continue;
+ urec = tempr;
+ }
+ }
+
+ SpinRelease(SInvalLock);
+
+ return(urec);
+}