summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/storage/ipc/sinval.c5
-rw-r--r--src/backend/storage/ipc/sinvaladt.c20
-rw-r--r--src/include/storage/sinvaladt.h6
3 files changed, 23 insertions, 8 deletions
diff --git a/src/backend/storage/ipc/sinval.c b/src/backend/storage/ipc/sinval.c
index 59732f2deb1..c5c011b5d42 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 1d0cedfa3ea..5ddaf3725b1 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 de24ce9e257..93e861ebeec 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