From ddd243584a0f353bbaba260d976cc41b251bbf21 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 16 May 2017 19:33:31 -0400 Subject: [PATCH] Fix leakage of memory context header in find_all_inheritors(). Commit 827d6f977 contained the same misunderstanding of hash_create's API as commit 090010f2e. As in 5d00b764c, remove the unnecessary layer of memory context. (This bug is less significant than the other one, since the extra context would be under a relatively short-lived context, but it's still a bug.) --- src/backend/catalog/pg_inherits.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c index 827ad2a850..04214fc203 100644 --- a/src/backend/catalog/pg_inherits.c +++ b/src/backend/catalog/pg_inherits.c @@ -29,9 +29,9 @@ #include "storage/lmgr.h" #include "utils/builtins.h" #include "utils/fmgroids.h" +#include "utils/memutils.h" #include "utils/syscache.h" #include "utils/tqual.h" -#include "utils/memutils.h" /* * Entry of a hash table used in find_all_inheritors. See below. @@ -169,29 +169,19 @@ find_all_inheritors(Oid parentrelId, LOCKMODE lockmode, List **numparents) /* hash table for O(1) rel_oid -> rel_numparents cell lookup */ HTAB *seen_rels; HASHCTL ctl; - MemoryContext new_ctx; List *rels_list, *rel_numparents; ListCell *l; - /* - * We need a separate memory context for a hash table. This is because - * hash table is used only in this procedure. To free a memory we need to - * call hash_destroy which is just a wrapper around MemoryContextDelete. - */ - new_ctx = AllocSetContextCreate(CurrentMemoryContext, - "FindAllInheritorsSeenRelsContext", - ALLOCSET_DEFAULT_SIZES); - memset(&ctl, 0, sizeof(ctl)); ctl.keysize = sizeof(Oid); ctl.entrysize = sizeof(SeenRelsEntry); - ctl.hcxt = new_ctx; + ctl.hcxt = CurrentMemoryContext; - seen_rels = hash_create( - "find_all_inheritors temporary table", - 32, /* start small and extend */ - &ctl, HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); + seen_rels = hash_create("find_all_inheritors temporary table", + 32, /* start small and extend */ + &ctl, + HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); /* * We build a list starting with the given rel and adding all direct and -- 2.40.0