aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/varsup.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/transam/varsup.c')
-rw-r--r--src/backend/access/transam/varsup.c46
1 files changed, 45 insertions, 1 deletions
diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c
index 34c607eab9f..95547bbe83d 100644
--- a/src/backend/access/transam/varsup.c
+++ b/src/backend/access/transam/varsup.c
@@ -6,7 +6,7 @@
* Copyright (c) 2000, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.38 2001/03/22 03:59:17 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.39 2001/05/25 15:34:49 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -16,7 +16,10 @@
#include "access/transam.h"
#include "access/xlog.h"
#include "storage/proc.h"
+#include "storage/sinval.h"
+#include "storage/sinvaladt.h"
+extern SISeg *shmInvalBuffer;
/* Number of XIDs and OIDs to prefetch (preallocate) per XLOG write */
#define VAR_XID_PREFETCH 1024
@@ -143,3 +146,44 @@ CheckMaxObjectId(Oid assigned_oid)
SpinRelease(OidGenLockId);
}
+
+/*
+ * GetMinBackendOid -- returns lowest oid stored on startup of
+ * each backend.
+ */
+Oid
+GetMinStartupOid(void)
+{
+ SISeg *segP = shmInvalBuffer;
+ ProcState *stateP = segP->procState;
+ int index;
+ Oid min_oid;
+
+ /* prime with current oid, no need for lock */
+ min_oid = ShmemVariableCache->nextOid;
+
+ SpinAcquire(SInvalLock);
+
+ for (index = 0; index < segP->lastBackend; index++)
+ {
+ SHMEM_OFFSET pOffset = stateP[index].procStruct;
+
+ if (pOffset != INVALID_OFFSET)
+ {
+ PROC *proc = (PROC *) MAKE_PTR(pOffset);
+ Oid proc_oid;
+
+ proc_oid = proc->startOid; /* we don't use spin-locking in
+ * AbortTransaction() ! */
+ if (proc == MyProc || proc_oid <= BootstrapObjectIdData)
+ continue;
+ if (proc_oid < min_oid)
+ min_oid = proc_oid;
+ }
+ }
+
+ SpinRelease(SInvalLock);
+ return min_oid;
+}
+
+