From: Justin Pryzby Date: Wed, 15 Sep 2021 14:38:49 -0500 Subject: [PATCH] stx: do not leak memory for each stats obj --- src/backend/statistics/extended_stats.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c index 63549757ec..d9387ceeb6 100644 --- a/src/backend/statistics/extended_stats.c +++ b/src/backend/statistics/extended_stats.c @@ -136,14 +136,14 @@ BuildRelationExtStatistics(Relation onerel, double totalrows, if (!natts) return; + pg_stext = table_open(StatisticExtRelationId, RowExclusiveLock); + statslist = fetch_statentries_for_relation(pg_stext, RelationGetRelid(onerel)); + cxt = AllocSetContextCreate(CurrentMemoryContext, "BuildRelationExtStatistics", ALLOCSET_DEFAULT_SIZES); oldcxt = MemoryContextSwitchTo(cxt); - pg_stext = table_open(StatisticExtRelationId, RowExclusiveLock); - statslist = fetch_statentries_for_relation(pg_stext, RelationGetRelid(onerel)); - /* report this phase */ if (statslist != NIL) { @@ -245,14 +245,12 @@ BuildRelationExtStatistics(Relation onerel, double totalrows, pgstat_progress_update_param(PROGRESS_ANALYZE_EXT_STATS_COMPUTED, ++ext_cnt); - /* free the build data (allocated as a single chunk) */ - pfree(data); + MemoryContextReset(cxt); } - table_close(pg_stext, RowExclusiveLock); - MemoryContextSwitchTo(oldcxt); MemoryContextDelete(cxt); + table_close(pg_stext, RowExclusiveLock); } /* -- 2.17.0 --kXdP64Ggrk/fb43R--