diff --git a/src/backend/storage/ipc/sinval.c b/src/backend/storage/ipc/sinval.c
index 59732f2deb1a06b2f0c9f57fa75227b952aeed19..c5c011b5d42c1d6b15798e41b5c4445896ad4432 100644
--- a/src/backend/storage/ipc/sinval.c
+++ b/src/backend/storage/ipc/sinval.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinval.c,v 1.10 1998/06/15 19:29:15 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinval.c,v 1.11 1998/08/25 21:31:17 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -157,8 +157,7 @@ RegisterSharedInvalid(int cacheId,		/* XXX */
 /*	should be called by a backend											*/
 /****************************************************************************/
 void
-			InvalidateSharedInvalid(void (*invalFunction) (),
-									void (*resetFunction) ())
+InvalidateSharedInvalid(void (*invalFunction) (), void (*resetFunction) ())
 {
 	SpinAcquire(SInvalLock);
 	SIReadEntryData(shmInvalBuffer, MyBackendId,
diff --git a/src/backend/storage/ipc/sinvaladt.c b/src/backend/storage/ipc/sinvaladt.c
index 1d0cedfa3ea4f21421d7fbeb8ba399dd67a01a3c..5ddaf3725b193b5ace3086156699d53c27cf46a6 100644
--- a/src/backend/storage/ipc/sinvaladt.c
+++ b/src/backend/storage/ipc/sinvaladt.c
@@ -7,11 +7,13 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinvaladt.c,v 1.12 1998/07/13 16:34:49 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinvaladt.c,v 1.13 1998/08/25 21:31:18 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
 
 #include "postgres.h"
 
@@ -20,6 +22,7 @@
 #include "storage/sinvaladt.h"
 #include "storage/lmgr.h"
 #include "utils/palloc.h"
+#include "utils/trace.h"
 
 /* ----------------
  *		global variable notes
@@ -357,6 +360,19 @@ SIGetProcStateLimit(SISeg *segP, int i)
 static bool
 SIIncNumEntries(SISeg *segP, int num)
 {
+	/*
+	 * Try to prevent table overflow. When the table is 70% full send
+	 * a SIGUSR2 to the postmaster which will send it back to all the
+	 * backends. This will be handled by Async_NotifyHandler() with a
+	 * StartTransactionCommand() which will flush unread SI entries for
+	 * each backend.									dz - 27 Jan 1998
+	 */
+	if (segP->numEntries == (MAXNUMMESSAGES * 70 / 100)) {
+		TPRINTF(TRACE_VERBOSE,
+				"SIIncNumEntries: table is 70%% full, signaling postmaster");
+		kill(getppid(), SIGUSR2);
+	}
+
 	if ((segP->numEntries + num) <= MAXNUMMESSAGES)
 	{
 		segP->numEntries = segP->numEntries + num;
@@ -655,7 +671,7 @@ SIReadEntryData(SISeg *segP,
 	else
 	{
 		/* backend must not read messages, its own state has to be reset	 */
-		elog(NOTICE, "SIMarkEntryData: cache state reset");
+		elog(NOTICE, "SIReadEntryData: cache state reset");
 		resetFunction();		/* XXXX call it here, parameters? */
 
 		/* new valid state--mark all messages "read" */
diff --git a/src/include/storage/sinvaladt.h b/src/include/storage/sinvaladt.h
index de24ce9e257324325c04d1e56b6d3e539b5c56dd..93e861ebeec604a4ab363dd11eed61bac515727f 100644
--- a/src/include/storage/sinvaladt.h
+++ b/src/include/storage/sinvaladt.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: sinvaladt.h,v 1.8 1998/02/26 04:43:35 momjian Exp $
+ * $Id: sinvaladt.h,v 1.9 1998/08/25 21:31:20 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -44,8 +44,8 @@ C----------------End shared segment -------
 */
 
 /* Parameters (configurable)  *******************************************/
-#define MaxBackendId 32			/* maximum number of backends		*/
-#define MAXNUMMESSAGES 1000		/* maximum number of messages in seg */
+#define MaxBackendId 64			/* maximum number of backends		*/
+#define MAXNUMMESSAGES 4000		/* maximum number of messages in seg */
 
 
 #define InvalidOffset	1000000000		/* a invalid offset  (End of