Keep rd_newRelfilenodeSubid across overflow.

Teach RelationCacheInvalidate() to keep rd_newRelfilenodeSubid across rel cache
message overflows, so that behaviour is now fully deterministic.

Noah Misch
This commit is contained in:
Simon Riggs 2012-12-24 16:43:22 +00:00
parent 42fa810c14
commit ae9aba69a8
1 changed files with 8 additions and 2 deletions

View File

@ -2163,8 +2163,14 @@ RelationCacheInvalidate(void)
/* Must close all smgr references to avoid leaving dangling ptrs */
RelationCloseSmgr(relation);
/* Ignore new relations, since they are never cross-backend targets */
if (relation->rd_createSubid != InvalidSubTransactionId)
/*
* Ignore new relations; no other backend will manipulate them before
* we commit. Likewise, before replacing a relation's relfilenode, we
* shall have acquired AccessExclusiveLock and drained any applicable
* pending invalidations.
*/
if (relation->rd_createSubid != InvalidSubTransactionId ||
relation->rd_newRelfilenodeSubid != InvalidSubTransactionId)
continue;
relcacheInvalsReceived++;