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]