• Tom Lane's avatar
    Improve memory management for PL/Tcl functions. · d062245b
    Tom Lane authored
    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@mail.gmail.com>
    d062245b
pltcl.c 84.4 KB