Commit ddd24358 authored by Tom Lane's avatar Tom Lane

Fix leakage of memory context header in find_all_inheritors().

Commit 827d6f97 contained the same misunderstanding of hash_create's API
as commit 090010f2.  As in 5d00b764, 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.)
parent a19ea9c6
...@@ -29,9 +29,9 @@ ...@@ -29,9 +29,9 @@
#include "storage/lmgr.h" #include "storage/lmgr.h"
#include "utils/builtins.h" #include "utils/builtins.h"
#include "utils/fmgroids.h" #include "utils/fmgroids.h"
#include "utils/memutils.h"
#include "utils/syscache.h" #include "utils/syscache.h"
#include "utils/tqual.h" #include "utils/tqual.h"
#include "utils/memutils.h"
/* /*
* Entry of a hash table used in find_all_inheritors. See below. * 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) ...@@ -169,29 +169,19 @@ find_all_inheritors(Oid parentrelId, LOCKMODE lockmode, List **numparents)
/* hash table for O(1) rel_oid -> rel_numparents cell lookup */ /* hash table for O(1) rel_oid -> rel_numparents cell lookup */
HTAB *seen_rels; HTAB *seen_rels;
HASHCTL ctl; HASHCTL ctl;
MemoryContext new_ctx;
List *rels_list, List *rels_list,
*rel_numparents; *rel_numparents;
ListCell *l; 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)); memset(&ctl, 0, sizeof(ctl));
ctl.keysize = sizeof(Oid); ctl.keysize = sizeof(Oid);
ctl.entrysize = sizeof(SeenRelsEntry); ctl.entrysize = sizeof(SeenRelsEntry);
ctl.hcxt = new_ctx; ctl.hcxt = CurrentMemoryContext;
seen_rels = hash_create( seen_rels = hash_create("find_all_inheritors temporary table",
"find_all_inheritors temporary table",
32, /* start small and extend */ 32, /* start small and extend */
&ctl, HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); &ctl,
HASH_ELEM | HASH_BLOBS | HASH_CONTEXT);
/* /*
* We build a list starting with the given rel and adding all direct and * We build a list starting with the given rel and adding all direct and
......
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