On Sun, May 10, 2020 at 10:20:53PM +0200, Pavel Stehule wrote: > When I rewrite same to functions then > > create or replace function p1func2(inout r int, inout v int) as $$ > begin v := random() * r; end > $$ language plpgsql; > > Then execution is about 1 sec, and memory requirements are +/- zero. > > Minimally it looks so CALL statements has a memory issue.
Behavior not limited to plpgsql. A plain SQL function shows the same leak patterns: create or replace procedure p1_sql(in r int, in v int) as $$ SELECT r + v; $$ language sql; And I cannot get valgrind to complain about lost references, so this looks like some missing memory context handling. Also, I actually don't quite get why the context created by CreateExprContext() cannot be freed before the procedure returns. A short test shows no problems in calling FreeExprContext() at the end of ExecuteCallStmt(), but that does not address everything. Perhaps a lack of tests with pass-by-reference expressions and procedures? Peter? -- Michael
signature.asc
Description: PGP signature