From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Improve memory management for PL/Tcl functions. |
Date: | 2016-08-31 21:27:16 |
Message-ID: | E1bfD2S-0004NH-LH@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Improve memory management for PL/Tcl functions.
Formerly, the memory used to represent a PL/Tcl function was allocated with
malloc() or in TopMemoryContext, and we'd leak it all if the function got
redefined during the session. Instead, create a per-function context and
keep everything in or under that context. Add a reference-counting
mechanism (like the one plpgsql has long had) so that we can safely clean
up an old function definition, either immediately if it's not being
executed or at the end of the outermost execution.
Currently, we only detect that a cached function is obsolete when we next
attempt to call that function. So this covers the updated-definition case
but leaves cruft around after DROP FUNCTION. It's not clear whether it's
worth installing a syscache invalidation callback to watch for drops;
none of the other PLs do, so for now we won't do it here either.
Michael Paquier and Tom Lane
Discussion: <CAB7nPqSOyAsHC6jL24J1B+oK3p=yyNoFU0Vs_B6fd2kdd5g5WQ(at)mail(dot)gmail(dot)com>
Branch
------
master
Details
-------
http://git.postgresql.org/pg/commitdiff/d062245b5bd591edf6f78bab8d6b8bb3ff69c7a6
Modified Files
--------------
src/pl/tcl/pltcl.c | 260 +++++++++++++++++++++++++++++------------------------
1 file changed, 144 insertions(+), 116 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2016-08-31 23:55:07 | pgsql: Improve memory management for PL/Perl functions. |
Previous Message | Tom Lane | 2016-08-31 17:58:06 | pgsql: Try to fix portability issue in enum renumbering (again). |