diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 1999-09-09 14:56:06 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 1999-09-09 14:56:06 +0000 |
commit | 8b8db01517bd688e35a70eb3a34fb0ce3c977085 (patch) | |
tree | bd87cfc2e48587707c8c250c142094bd3b6bd83b | |
parent | 9e713ddb99da9ef9bdc893460dca2b6a91f01ba0 (diff) | |
download | postgresql-8b8db01517bd688e35a70eb3a34fb0ce3c977085.tar.gz postgresql-8b8db01517bd688e35a70eb3a34fb0ce3c977085.zip |
Minor improvement in SI overflow logic: try to delete
expired messages before concluding that we really have buffer overflow.
-rw-r--r-- | src/backend/storage/ipc/sinvaladt.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/backend/storage/ipc/sinvaladt.c b/src/backend/storage/ipc/sinvaladt.c index 99426693cd1..1a91dde9b1c 100644 --- a/src/backend/storage/ipc/sinvaladt.c +++ b/src/backend/storage/ipc/sinvaladt.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinvaladt.c,v 1.25 1999/09/06 19:37:38 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinvaladt.c,v 1.26 1999/09/09 14:56:06 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -228,9 +228,19 @@ SIInsertDataEntry(SISeg *segP, SharedInvalidData *data) /* Is the buffer full? */ if (numMsgs >= MAXNUMMESSAGES) { - /* Yes, so force reset */ - SISetProcStateInvalid(segP); - return false; + /* + * Don't panic just yet: slowest backend might have consumed some + * messages but not yet have done SIDelExpiredDataEntries() to + * advance minMsgNum. So, make sure minMsgNum is up-to-date. + */ + SIDelExpiredDataEntries(segP); + numMsgs = segP->maxMsgNum - segP->minMsgNum; + if (numMsgs >= MAXNUMMESSAGES) + { + /* Yup, it's definitely full, no choice but to reset */ + SISetProcStateInvalid(segP); + return false; + } } /* |