|
7 | 7 | *
|
8 | 8 | *
|
9 | 9 | * IDENTIFICATION
|
10 |
| - * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinvaladt.c,v 1.25 1999/09/06 19:37:38 tgl Exp $ |
| 10 | + * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinvaladt.c,v 1.26 1999/09/09 14:56:06 tgl Exp $ |
11 | 11 | *
|
12 | 12 | *-------------------------------------------------------------------------
|
13 | 13 | */
|
@@ -228,9 +228,19 @@ SIInsertDataEntry(SISeg *segP, SharedInvalidData *data)
|
228 | 228 | /* Is the buffer full? */
|
229 | 229 | if (numMsgs >=MAXNUMMESSAGES)
|
230 | 230 | {
|
231 |
| -/* Yes, so force reset */ |
232 |
| -SISetProcStateInvalid(segP); |
233 |
| -return false; |
| 231 | +/* |
| 232 | + * Don't panic just yet: slowest backend might have consumed some |
| 233 | + * messages but not yet have done SIDelExpiredDataEntries() to |
| 234 | + * advance minMsgNum. So, make sure minMsgNum is up-to-date. |
| 235 | + */ |
| 236 | +SIDelExpiredDataEntries(segP); |
| 237 | +numMsgs=segP->maxMsgNum-segP->minMsgNum; |
| 238 | +if (numMsgs >=MAXNUMMESSAGES) |
| 239 | +{ |
| 240 | +/* Yup, it's definitely full, no choice but to reset */ |
| 241 | +SISetProcStateInvalid(segP); |
| 242 | +return false; |
| 243 | +} |
234 | 244 | }
|
235 | 245 |
|
236 | 246 | /*
|
|