From beac8c1c4609eb7dcb24e5352c66f3b70682d331 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Mon, 12 Oct 1998 00:53:42 +0000
Subject: [PATCH] Fix for vacuum and cache use.  Fix for BSDI 4.0.

---
 src/backend/access/heap/heapam.c   | 26 +-------------------------
 src/backend/commands/vacuum.c      | 11 ++++-------
 src/backend/utils/cache/catcache.c |  5 ++++-
 src/backend/utils/cache/inval.c    | 19 +++----------------
 src/include/utils/inval.h          |  4 +---
 src/makefiles/Makefile.bsdi        |  5 +++++
 src/makefiles/Makefile.linux       |  2 +-
 src/makefiles/Makefile.sco         |  3 +--
 8 files changed, 20 insertions(+), 55 deletions(-)

diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index b0500c9b6ab..c2b346e2f5a 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.36 1998/10/08 18:29:12 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.37 1998/10/12 00:53:30 momjian Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -98,8 +98,6 @@
 
 static void doinsert(Relation relation, HeapTuple tup);
 
-static bool ImmediateInvalidation;
-
 /* ----------------------------------------------------------------
  *						 heap support routines
  * ----------------------------------------------------------------
@@ -484,22 +482,6 @@ doinsert(Relation relation, HeapTuple tup)
 	return;
 }
 
-/*
- *		HeapScanIsValid is now a macro in relscan.h -cim 4/27/91
- */
-
-#ifdef NOT_USED
-/* ----------------
- *		SetHeapAccessMethodImmediateInvalidation
- * ----------------
- */
-void
-SetHeapAccessMethodImmediateInvalidation(bool on)
-{
-	ImmediateInvalidation = on;
-}
-
-#endif
 
 /* ----------------------------------------------------------------
  *					 heap access method interface
@@ -1149,9 +1131,7 @@ heap_insert(Relation relation, HeapTuple tup)
 		 *		invalidate caches (only works for system relations)
 		 * ----------------
 		 */
-		SetRefreshWhenInvalidate(ImmediateInvalidation);
 		RelationInvalidateHeapTuple(relation, tup);
-		SetRefreshWhenInvalidate((bool) !ImmediateInvalidation);
 	}
 
 	return tup->t_oid;
@@ -1253,9 +1233,7 @@ heap_delete(Relation relation, ItemPointer tid)
 	 *	invalidate caches
 	 * ----------------
 	 */
-	SetRefreshWhenInvalidate(ImmediateInvalidation);
 	RelationInvalidateHeapTuple(relation, tp);
-	SetRefreshWhenInvalidate((bool) !ImmediateInvalidation);
 
 	WriteBuffer(buf);
 	if (IsSystemRelationName(RelationGetRelationName(relation)->data))
@@ -1407,9 +1385,7 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple replace_tuple)
 	 *	invalidate caches
 	 * ----------------
 	 */
-	SetRefreshWhenInvalidate(ImmediateInvalidation);
 	RelationInvalidateHeapTuple(relation, old_tuple);
-	SetRefreshWhenInvalidate((bool) !ImmediateInvalidation);
 
 	WriteBuffer(buffer);
 
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 35f34f30a20..c0a8789aa9c 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.87 1998/10/09 21:31:34 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.88 1998/10/12 00:53:31 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1084,6 +1084,8 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel,
 			newtup = (HeapTuple) palloc(tuple_len);
 			memmove((char *) newtup, (char *) tuple, tuple_len);
 
+			RelationInvalidateHeapTuple(onerel, tuple);
+
 			/* store transaction information */
 			TransactionIdStore(myXID, &(newtup->t_xmin));
 			newtup->t_cmin = myCID;
@@ -1876,12 +1878,7 @@ vc_updstats(Oid relid, int num_pages, int num_tuples, bool hasindex, VRelStats *
 	/* XXX -- after write, should invalidate relcache in other backends */
 	WriteNoReleaseBuffer(ItemPointerGetBlockNumber(&rtup->t_ctid));
 
-	/*
-	 * invalidating system relations confuses the function cache of
-	 * pg_operator and pg_opclass, bjm
-	 */
-	if (!IsSystemRelationName(pgcform->relname.data))
-		RelationInvalidateHeapTuple(rd, rtup);
+	RelationInvalidateHeapTuple(rd, rtup);
 
 	ReleaseBuffer(buffer);
 	heap_close(rd);
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index d54d2584ae8..97accc93db0 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.34 1998/09/01 04:32:57 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.35 1998/10/12 00:53:33 momjian Exp $
  *
  * Notes:
  *		XXX This needs to use exception.h to handle recovery when
@@ -1108,6 +1108,7 @@ RelationInvalidateCatalogCacheTuple(Relation relation,
 	 */
 	Assert(RelationIsValid(relation));
 	Assert(HeapTupleIsValid(tuple));
+	Assert(PointerIsValid(function));
 	CACHE1_elog(DEBUG, "RelationInvalidateCatalogCacheTuple: called");
 
 	/* ----------------
@@ -1132,9 +1133,11 @@ RelationInvalidateCatalogCacheTuple(Relation relation,
 		if (relationId != ccp->relationId)
 			continue;
 
+#ifdef NOT_USED
 		/* OPT inline simplification of CatalogCacheIdInvalidate */
 		if (!PointerIsValid(function))
 			function = CatalogCacheIdInvalidate;
+#endif
 
 		(*function) (ccp->id,
 				 CatalogCacheComputeTupleHashIndex(ccp, relation, tuple),
diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c
index d21540776de..0517e1a0cda 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.16 1998/09/01 04:33:00 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.17 1998/10/12 00:53:34 momjian Exp $
  *
  * Note - this code is real crufty...
  *
@@ -74,7 +74,6 @@ typedef InvalidationMessageData *InvalidationMessage;
  * ----------------
  */
 static LocalInvalid Invalid = EmptyLocalInvalid;		/* XXX global */
-static bool RefreshWhenInvalidate = false;
 
 Oid			MyRelationRelationId = InvalidOid;
 Oid			MyAttributeRelationId = InvalidOid;
@@ -572,20 +571,6 @@ RegisterInvalid(bool send)
 	Invalid = EmptyLocalInvalid;
 }
 
-/*
- * SetRefreshWhenInvalidate --
- *		Causes the local caches to be immediately refreshed iff true.
- */
-void
-SetRefreshWhenInvalidate(bool on)
-{
-#ifdef	INVALIDDEBUG
-	elog(DEBUG, "RefreshWhenInvalidate(%d) called", on);
-#endif	 /* defined(INVALIDDEBUG) */
-
-	RefreshWhenInvalidate = on;
-}
-
 /*
  * RelationIdInvalidateHeapTuple --
  *		Causes the given tuple in a relation to be invalidated.
@@ -641,9 +626,11 @@ RelationInvalidateHeapTuple(Relation relation, HeapTuple tuple)
 									tuple,
 									RelationIdRegisterLocalInvalid);
 
+#ifdef NOT_USED
 	if (RefreshWhenInvalidate)
 		/* what does this do?  bjm 1998/08/20 */
 		RelationInvalidateCatalogCacheTuple(relation,
 											tuple,
 											(void (*) ()) NULL);
+#endif
 }
diff --git a/src/include/utils/inval.h b/src/include/utils/inval.h
index bb2591552b3..f035c293032 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.9 1998/09/01 04:39:15 momjian Exp $
+ * $Id: inval.h,v 1.10 1998/10/12 00:53:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,8 +22,6 @@ extern void DiscardInvalid(void);
 
 extern void RegisterInvalid(bool send);
 
-extern void SetRefreshWhenInvalidate(bool on);
-
 extern void RelationInvalidateHeapTuple(Relation relation, HeapTuple tuple);
 
 /*
diff --git a/src/makefiles/Makefile.bsdi b/src/makefiles/Makefile.bsdi
index 88fe307e156..b1da0004cb7 100644
--- a/src/makefiles/Makefile.bsdi
+++ b/src/makefiles/Makefile.bsdi
@@ -1,4 +1,9 @@
 # for bsdi 4.0 ELF
 # if we defined .so in template/bsdi_4.0
+
+ifeq ($(DLSUFFIX), .so)
+LDFLAGS+= -export-dynamic
+endif
+
 %.so: %.o
 	$(LD) -shared -o $@ $<
diff --git a/src/makefiles/Makefile.linux b/src/makefiles/Makefile.linux
index 0166e3d1677..91e50d672db 100644
--- a/src/makefiles/Makefile.linux
+++ b/src/makefiles/Makefile.linux
@@ -1,4 +1,4 @@
-LDFLAGS+= -export-dynamic #-Wl,-rpath -Wl,$(LIBDIR)
+LDFLAGS+= -export-dynamic
 MK_NO_LORDER= true
 
 %.so: %.o
diff --git a/src/makefiles/Makefile.sco b/src/makefiles/Makefile.sco
index 2bc7627eb80..325c9516bdf 100644
--- a/src/makefiles/Makefile.sco
+++ b/src/makefiles/Makefile.sco
@@ -1,6 +1,5 @@
 CFLAGS += -dy
 LDFLAGS += -W l,-Bexport
-%.so: %.o
-	$(LD) -G -Bdynamic -o $@ $<
+
 %.so: %.o
 	$(LD) -G -Bdynamic -o $@ $<
-- 
GitLab