diff options
Diffstat (limited to 'src/backend/access/transam/xlogutils.c')
-rw-r--r-- | src/backend/access/transam/xlogutils.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c index 0271742ce0a..a7c8d3bf52b 100644 --- a/src/backend/access/transam/xlogutils.c +++ b/src/backend/access/transam/xlogutils.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/xlogutils.c,v 1.29 2004/02/10 01:55:24 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xlogutils.c,v 1.30 2004/02/11 22:55:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -319,6 +319,9 @@ XLogCloseRelationCache(void) _xlrelarr = NULL; } +/* + * Open a relation during XLOG replay + */ Relation XLogOpenRelation(bool redo, RmgrId rmid, RelFileNode rnode) { @@ -386,3 +389,31 @@ XLogOpenRelation(bool redo, RmgrId rmid, RelFileNode rnode) return (&(res->reldata)); } + +/* + * Close a relation during XLOG replay + * + * This is called when the relation is about to be deleted; we need to ensure + * that there is no dangling smgr reference in the xlog relation cache. + * + * Currently, we don't bother to physically remove the relation from the + * cache, we just let it age out normally. + */ +void +XLogCloseRelation(RelFileNode rnode) +{ + XLogRelDesc *rdesc; + XLogRelCacheEntry *hentry; + + hentry = (XLogRelCacheEntry *) + hash_search(_xlrelcache, (void *) &rnode, HASH_FIND, NULL); + + if (!hentry) + return; /* not in cache so no work */ + + rdesc = hentry->rdesc; + + if (rdesc->reldata.rd_smgr != NULL) + smgrclose(rdesc->reldata.rd_smgr); + rdesc->reldata.rd_smgr = NULL; +} |