Thread
Commits
-
Further fix thinko in plpgsql memory leak fix.
- 7966b41ded75 11.11 landed
- d37965965ad3 12.6 landed
- 63d78d106d2f 13.2 landed
- 5f2e09bcccd7 14.0 landed
-
Fix thinko in plpgsql memory leak fix.
- fd1347f9d8de 12.6 landed
- ea80d8d9437e 14.0 landed
- 2e15f48d9727 11.11 landed
- 0ea25ed108d8 13.2 landed
-
Fix memory leak in plpgsql's CALL processing.
- a6b1f5365d58 14.0 cited
-
pgsql: Fix memory leak in plpgsql's CALL processing.
Tom Lane <tgl@sss.pgh.pa.us> — 2020-09-29T15:18:47Z
Fix memory leak in plpgsql's CALL processing. When executing a CALL or DO in a non-atomic context (i.e., not inside a function or query), plpgsql creates a new plan each time through, as a rather hacky solution to some resource management issues. But it failed to free this plan until exit of the current procedure or DO block, resulting in serious memory bloat in procedures that called other procedures many times. Fix by remembering to free the plan, and by being more honest about restoring the previous state (otherwise, recursive procedure calls have a problem). There was also a smaller leak associated with recalculation of the "target" list of output variables. Fix that by using the statement- lifespan context to hold non-permanent values. Back-patch to v11 where procedures were introduced. Pavel Stehule and Tom Lane Discussion: https://postgr.es/m/CAFj8pRDiiU1dqym+_P4_GuTWm76knJu7z9opWayBJTC0nQGUUA@mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/a6b1f5365d58356b5d42829e9cd89a6c725d7a0a Modified Files -------------- src/pl/plpgsql/src/pl_exec.c | 91 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 70 insertions(+), 21 deletions(-)
-
Re: pgsql: Fix memory leak in plpgsql's CALL processing.
Peter Eisentraut <peter.eisentraut@enterprisedb.com> — 2020-12-28T09:47:38Z
This change has broken the following test case (reduced from actual production code): CREATE OR REPLACE PROCEDURE prc_inout_test_inner(INOUT x integer) LANGUAGE plpgsql AS $procedure$ BEGIN COMMIT; x := 2; END; $procedure$; CREATE OR REPLACE PROCEDURE prc_inout_test_main() LANGUAGE plpgsql AS $procedure$ DECLARE y INTEGER := 1; BEGIN CALL prc_inout_test_inner(y); END; $procedure$; CALL prc_inout_test_main(); With the patch, it fails like this: ERROR: XX000: unsupported target type: 0 CONTEXT: PL/pgSQL function prc_inout_test_main() line 5 at CALL LOCATION: exec_move_row_from_fields, pl_exec.c:7196 On 2020-09-29 17:18, Tom Lane wrote: > Fix memory leak in plpgsql's CALL processing. > > When executing a CALL or DO in a non-atomic context (i.e., not inside > a function or query), plpgsql creates a new plan each time through, > as a rather hacky solution to some resource management issues. But > it failed to free this plan until exit of the current procedure or DO > block, resulting in serious memory bloat in procedures that called > other procedures many times. Fix by remembering to free the plan, > and by being more honest about restoring the previous state (otherwise, > recursive procedure calls have a problem). > > There was also a smaller leak associated with recalculation of the > "target" list of output variables. Fix that by using the statement- > lifespan context to hold non-permanent values. > > Back-patch to v11 where procedures were introduced. > > Pavel Stehule and Tom Lane > > Discussion: https://postgr.es/m/CAFj8pRDiiU1dqym+_P4_GuTWm76knJu7z9opWayBJTC0nQGUUA@mail.gmail.com > > Branch > ------ > master > > Details > ------- > https://git.postgresql.org/pg/commitdiff/a6b1f5365d58356b5d42829e9cd89a6c725d7a0a > > Modified Files > -------------- > src/pl/plpgsql/src/pl_exec.c | 91 ++++++++++++++++++++++++++++++++++---------- > 1 file changed, 70 insertions(+), 21 deletions(-) >
-
Re: pgsql: Fix memory leak in plpgsql's CALL processing.
Tom Lane <tgl@sss.pgh.pa.us> — 2020-12-28T15:11:40Z
Peter Eisentraut <peter.eisentraut@enterprisedb.com> writes: > This change has broken the following test case (reduced from actual > production code): Thanks for the report. What I see here is ERROR: unsupported target type: 2139062143 so it looks like a memory clobber --- probably some data structure is being built in the wrong memory context. Will look closer shortly. regards, tom lane
-
Re: pgsql: Fix memory leak in plpgsql's CALL processing.
Tom Lane <tgl@sss.pgh.pa.us> — 2020-12-28T16:42:22Z
I wrote: > so it looks like a memory clobber --- probably some data structure is > being built in the wrong memory context. Will look closer shortly. Brain-dead typo ... where's my brown paper bag? regards, tom lane