Commit b0be247e authored by Tom Lane's avatar Tom Lane

Fix a tiny memory leak (one List header) in RelationCacheInvalidate().

This is utterly insignificant in normal operation, but it becomes a
problem during cache inval stress testing.  The original coding in fact
had no leak --- the 8.0 List rewrite created the issue.  I wonder whether
list_concat should pfree the discarded header?
parent 7259cc1e
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.235 2006/01/08 20:04:41 tgl Exp $ * $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.236 2006/01/19 00:27:08 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1795,8 +1795,6 @@ RelationCacheInvalidate(void) ...@@ -1795,8 +1795,6 @@ RelationCacheInvalidate(void)
} }
} }
rebuildList = list_concat(rebuildFirstList, rebuildList);
/* /*
* Now zap any remaining smgr cache entries. This must happen before we * Now zap any remaining smgr cache entries. This must happen before we
* start to rebuild entries, since that may involve catalog fetches which * start to rebuild entries, since that may involve catalog fetches which
...@@ -1805,6 +1803,12 @@ RelationCacheInvalidate(void) ...@@ -1805,6 +1803,12 @@ RelationCacheInvalidate(void)
smgrcloseall(); smgrcloseall();
/* Phase 2: rebuild the items found to need rebuild in phase 1 */ /* Phase 2: rebuild the items found to need rebuild in phase 1 */
foreach(l, rebuildFirstList)
{
relation = (Relation) lfirst(l);
RelationClearRelation(relation, true);
}
list_free(rebuildFirstList);
foreach(l, rebuildList) foreach(l, rebuildList)
{ {
relation = (Relation) lfirst(l); relation = (Relation) lfirst(l);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment