• Tom Lane's avatar
    Fix memory leaks in PL/Python. · 8c75ad43
    Tom Lane authored
    Previously, plpython was in the habit of allocating a lot of stuff in
    TopMemoryContext, and it was very slipshod about making sure that stuff
    got cleaned up; in particular, use of TopMemoryContext as fn_mcxt for
    function calls represents an unfixable leak, since we generally don't
    know what the called function might have allocated in fn_mcxt.  This
    results in session-lifespan leakage in certain usage scenarios, as for
    example in a case reported by Ed Behn back in July.
    
    To fix, get rid of all the retail allocations in TopMemoryContext.
    All long-lived allocations are now made in sub-contexts that are
    associated with specific objects (either pl/python procedures, or
    Python-visible objects such as cursors and plans).  We can clean these
    up when the associated object is deleted.
    
    I went so far as to get rid of PLy_malloc completely.  There were a
    couple of places where it could still have been used safely, but on
    the whole it was just an invitation to bad coding.
    
    Haribabu Kommi, based on a draft patch by Heikki Linnakangas;
    some further work by me
    8c75ad43
plpy_subxactobject.c 5.58 KB