aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/cache/catcache.c25
-rw-r--r--src/backend/utils/cache/inval.c16
-rw-r--r--src/backend/utils/cache/relcache.c4
-rw-r--r--src/backend/utils/init/postinit.c9
-rw-r--r--src/include/utils/catcache.h3
-rw-r--r--src/include/utils/inval.h4
6 files changed, 55 insertions, 6 deletions
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 616d875dc3f..36a617d8ae0 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.22 1998/02/11 19:12:47 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.23 1998/02/23 17:43:19 scrappy Exp $
*
* Notes:
* XXX This needs to use exception.h to handle recovery when
@@ -621,6 +621,29 @@ ResetSystemCache()
}
/* --------------------------------
+ * SystemCacheRelationFlushed
+ *
+ * RelationFlushRelation() frees some information referenced in the
+ * cache structures. So we get informed when this is done and arrange
+ * for the next SearchSysCache() call that this information is setup
+ * again.
+ * --------------------------------
+ */
+void
+SystemCacheRelationFlushed(Oid relId)
+{
+ struct catcache *cache;
+
+ for (cache = Caches; PointerIsValid(cache); cache = cache->cc_next)
+ {
+ if (cache->relationId == relId)
+ {
+ cache->relationId = InvalidOid;
+ }
+ }
+}
+
+/* --------------------------------
* InitIndexedSysCache
*
* This allocates and initializes a cache for a system catalog relation.
diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c
index e7b44380ab8..20762257e89 100644
--- a/src/backend/utils/cache/inval.c
+++ b/src/backend/utils/cache/inval.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.9 1997/11/17 16:59:22 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.10 1998/02/23 17:43:23 scrappy Exp $
*
* Note - this code is real crufty...
*
@@ -512,6 +512,20 @@ RelationInvalidateRelationCache(Relation relation,
(*function) (relationId, objectId);
}
+
+/*
+ * InitLocalInvalidateData
+ *
+ * Setup this before anything could ever get invalid!
+ * Called by InitPostgres();
+ */
+void
+InitLocalInvalidateData()
+{
+ ValidateHacks();
+}
+
+
/*
* DiscardInvalid --
* Causes the invalidated cache state to be discarded.
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index 28d9848f7b5..f40d5a3fdbc 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.35 1998/01/31 04:38:52 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.36 1998/02/23 17:43:25 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
@@ -65,6 +65,7 @@
#include "utils/relcache.h"
#include "utils/hsearch.h"
#include "utils/relcache.h"
+#include "utils/catcache.h"
#include "catalog/catname.h"
#include "catalog/catalog.h"
@@ -1344,6 +1345,7 @@ RelationFlushRelation(Relation *relationPtr,
RelationCacheDelete(relation);
FreeTupleDesc(relation->rd_att);
+ SystemCacheRelationFlushed(relation->rd_id);
FreeTriggerDesc(relation);
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index e3ec4131be4..2cd2a83b3c2 100644
--- a/src/backend/utils/init/postinit.c
+++ b/src/backend/utils/init/postinit.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.22 1998/01/29 03:23:28 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.23 1998/02/23 17:43:53 scrappy Exp $
*
* NOTES
* InitPostgres() is the function called from PostgresMain
@@ -62,6 +62,7 @@
#include "utils/elog.h"
#include "utils/palloc.h"
#include "utils/mcxt.h" /* for EnableMemoryContext, etc. */
+#include "utils/inval.h"
#include "catalog/catname.h"
#include "catalog/pg_database.h"
@@ -587,6 +588,12 @@ InitPostgres(char *name) /* database name */
InitUserid();
/* ----------------
+ * initialize local data in cache invalidation stuff
+ * ----------------
+ */
+ InitLocalInvalidateData();
+
+ /* ----------------
* ok, all done, now let's make sure we don't do it again.
* ----------------
*/
diff --git a/src/include/utils/catcache.h b/src/include/utils/catcache.h
index 81215d09874..e32035b7494 100644
--- a/src/include/utils/catcache.h
+++ b/src/include/utils/catcache.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: catcache.h,v 1.9 1998/01/24 22:50:34 momjian Exp $
+ * $Id: catcache.h,v 1.10 1998/02/23 17:44:22 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
@@ -66,6 +66,7 @@ extern GlobalMemory CacheCxt;
extern void CatalogCacheIdInvalidate(int cacheId, Index hashIndex,
ItemPointer pointer);
extern void ResetSystemCache(void);
+extern void SystemCacheRelationFlushed(Oid relId);
extern CatCache * InitSysCache(char *relname, char *indname, int id, int nkeys,
int key[], HeapTuple (*iScanfuncP) ());
extern HeapTuple SearchSysCache(struct catcache * cache, Datum v1, Datum v2,
diff --git a/src/include/utils/inval.h b/src/include/utils/inval.h
index 06ebf21927e..a487e88a74b 100644
--- a/src/include/utils/inval.h
+++ b/src/include/utils/inval.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: inval.h,v 1.7 1997/09/08 21:55:08 momjian Exp $
+ * $Id: inval.h,v 1.8 1998/02/23 17:44:24 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
@@ -16,6 +16,8 @@
#include <access/htup.h>
#include <utils/rel.h>
+extern void InitLocalInvalidateData(void);
+
extern void DiscardInvalid(void);
extern void RegisterInvalid(bool send);