From c9be1bccc18df88c8a95b6748b9e979bed2f6cac Mon Sep 17 00:00:00 2001 From: "Vadim B. Mikheev" <vadim4o@yahoo.com> Date: Thu, 22 May 1997 17:24:20 +0000 Subject: [PATCH] RelationPurgeLocalRelation(): /* * RelationFlushRelation () below will flush relation information * from the cache. We must call smgrclose to flush relation * information from SMGR & FMGR, too. We assume that for temp * relations smgrunlink is already called by heap_destroyr * and we skip smgrclose for them. - vadim 05/22/97 */ smgrclose(reln->rd_rel->relsmgr, reln); - it avoids memory leaks in SMGR & VFD. RelationFlushRelation(): there is no more call FileInvalidate(RelationGetSystemPort(relation)); - invalid (FileInvalidate() expects File, not SMGR' fd) - unuseful anyway. --- src/backend/utils/cache/relcache.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 31c8f352144..61c6359e088 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.7 1997/05/20 11:41:38 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.8 1997/05/22 17:24:20 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -1217,9 +1217,7 @@ RelationFlushRelation(Relation *relationPtr, oldcxt = MemoryContextSwitchTo((MemoryContext)CacheCxt); RelationCacheDelete(relation); - - FileInvalidate(RelationGetSystemPort(relation)); - + p = relation->rd_att->attrs; for (i = 0; i < relation->rd_rel->relnatts; i++, p++) pfree (*p); @@ -1425,6 +1423,15 @@ RelationPurgeLocalRelation(bool xactCommitted) smgrunlink(reln->rd_rel->relsmgr, reln); } } + else if ( !IsBootstrapProcessingMode () && !(reln->rd_istemp) ) + /* + * RelationFlushRelation () below will flush relation information + * from the cache. We must call smgrclose to flush relation + * information from SMGR & FMGR, too. We assume that for temp + * relations smgrunlink is already called by heap_destroyr + * and we skip smgrclose for them. - vadim 05/22/97 + */ + smgrclose(reln->rd_rel->relsmgr, reln); reln->rd_islocal = FALSE; -- GitLab