postgres.git / summary / log / commit / refs
commit 9b2fd490577bc957429f337cfd72869eb8ef08c9
Author: Peter Eisentraut <peter@eisentraut.org>
Date: Wed Sep 15 09:59:34 2021 +0000
Fix hash_array
Commit 054adca641ac1279dc8d9b74fda41948ac35e9a9 neglected to
initialize the type_id field of the synthesized type cache entry, so
it would make a new one on every call.
Also, better use the per-function memory context for this; otherwise
it leaks memory.
Discussion: https://www.postgresql.org/message-id/flat/17158-8a2ba823982537a4%40postgresql.org
src/backend/utils/adt/arrayfuncs.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index bc2f30bae15..660e854e93f 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -3992,13 +3992,14 @@ hash_array(PG_FUNCTION_ARGS)
MemoryContext oldcontext;
TypeCacheEntry *record_typentry;
- oldcontext = MemoryContextSwitchTo(CacheMemoryContext);
+ oldcontext = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
/*
* Make fake type cache entry structure. Note that we can't just
* modify typentry, since that points directly into the type cache.
*/
- record_typentry = palloc(sizeof(*record_typentry));
+ record_typentry = palloc0(sizeof(*record_typentry));
+ record_typentry->type_id = element_type;
/* fill in what we need below */
record_typentry->typlen = typentry->typlen;
[parent: 6e6adbddbce1]